过去,我需要在使用导入的 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# 中完成的方式。有没有更好的方法来做到这一点?