下面是一个例子:publicclassMyPolicy:SoapFilter{publicoverrideSoapFilterResultProcessMessage(SoapEnvelopeenvelope){//删除所有WS-Addressing和WS-Security头信息envelope.Header.RemoveAll();返回SoapFilterResult.Continue;}}publicclassMyAssertion:PolicyAssertion{publicoverrideSoapFilterCreateClientInputFilter(FilterCreationContextcontext){returnnull;}publicoverrideSoapFilterCreateClientOutputFilter(FilterCreationContextcontext){returnnewMyPolicy();}publicoverrideSoapFilterCreateServiceInputFilter(FilterCreationContextcontext){returnnull;}publicoverrideSoapFilterCreateServiceOutputFilter(FilterCreationContextcontext){returnnull;}}然后在您的Web服务代理的构造函数中应用策略:///[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services","2.0.50727.1433")][System.Diagnostics.DebuggerStepThroughAttribute()][System.ComponentModel.DesignerCategoryAttribute("code")][System.Web.Services.WebServiceBindingAttribute(Name="MyBinding",Namespace="http://example.com")]publicpartialclassMyWebClient:WebServicesClientProtocol{//...这里的成员变量///publicMyWebClient(){this.Url="http://example.com";如果((this.IsLocalFileSystemWebService(this.Url)==true)){this.UseDefaultCredentials=true;this.useDefaultCredentialsSetExplicitly=false;}else{this.useDefaultCredentialsSetExplicitly=true;}//在这里应用策略Policypolicy=newPolicy();policy.Assertions.Add(newMyAssertion());this.SetPolicy(政策);为了删除寻址标头,我在我的一个应用程序中使用了以下代码publicoverridevoidSecureMessage(SoapEnvelopeenvelope,Securitysecurity){//从信封中删除寻址标头objAH.RemoveXml(信封);//添加你要添加的Wahtever安全令牌.security.Tokens。bla-bla-bla);我正在使用SecureMessage函数,因为我想添加一个安全令牌,但可以在ProcessMessage函数中使用相同的代码。我想知道您的问题是否也可以通过不使用WSE来解决?根据此页面中的答案,我添加了以下代码以递归地从XML中删除特定标头(通过标记名)。PublicOverridesFunctionProcessMessage(ByValenvelopeAsSoapEnvelope)AsSoapFilterResult'删除所有WS-Addressing和WS-Security标头信息RemoveTag(envelope.DocumentElement,"wsa:Action")RemoveTag(envelope.DocumentElement,"wsa:MessageID")删除信封.DocumentElement,"wsa:To")ReturnSoapFilterResult.[Continue]EndFunctionPrivateSubRemoveTag(ByValXEAsSystem.Xml.XmlElement,ByValTagNameAsString)ForEachNAsXmlNodeInXE如果N.ChildNodes.Count>0ThenRemoveTag(N,TagName)EndIfIfN.Name=TagNameThenXE.RemoveChild(N)EndIfNextEndSub我发现删除这些寻址和安全标头的最简单方法是将Web服务配置更改为使用BasicHttpBinding而不是WSHttp绑定。以上是C#学习教程:删除WSE3.0客户端请求中的WS-Addressing/WS-Security部分。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收藏不代表立场,如涉及侵权,请点右转联系管理员删除。如需转载请注明出处:
