以前は、インポートされたWSDL Web参照を使用していたC#プロジェクトでカスタムSOAPヘッダーを作成する必要がありました。私はそれを行う方法を見つけましたが、私はそれに満足することはなく、もっと良い方法があるかどうか疑問に思いました。私がしたことは、SoapHeaderから派生したヘッダーを作成することでした。
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://model.test.net")]
[System.Xml.Serialization.XmlRootAttribute("securitytoken", Namespace = "http://model.test.net", IsNullable = false)]
public class SpecialHeader : SoapHeader
{
[System.Xml.Serialization.XmlTextAttribute()]
public string aheadervalue;
}
次に、WSDLから生成されたコードを変更し、カスタムヘッダーを含めたい各Web呼び出しの前に、新しいヘッダーのインスタンスと次のインスタンスに参照を追加する必要がありました。
[System.Web.Services.Protocols.SoapHeaderAttribute("instancename", Direction=System.Web.Services.Protocols.SoapHeaderDirection.InOut)]
ここで、「instancename」は、生成されたクラスのカスタムヘッダーのインスタンス変数名です。
これは正常に機能しますが、WSDLを変更すると、クラスが再生成されるため、すべてをやり直す必要があります。他の言語では、生成されたコードの外部にヘッダーを追加できるため、C#で行われる方法が欠落している可能性があります。これを行うためのより良い方法はありますか?