2012-04-21 102 views
3

我需要添加到我的留言是这样出现的:如何添加<soap:Header>标记? WSDL与这些信息

<soap:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soap:mustUnderstand="1"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="unt_Z1k4LnxEmBzzKuPP"> 
     <wsse:Username>user</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password> 
     <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">iNs+LF1iwwPU2AMer8uU6NKY9tfzgYqMTaP3mIEgoK0=</wsse:Nonce> 
     <wsu:Created>2012-04-22T11:57:30Z</wsu:Created> 
     </wsse:UsernameToken> 
     <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsu:Created>2012-04-22T11:57:30Z</wsu:Created> 
     <wsu:Expires>2012-04-22T11:58:30Z</wsu:Expires> 
     </wsu:Timestamp> 
    </wsse:Security> 
    </soap:Header> 

我调用Web服务,它返回一个500错误响应这基本上意味着它无法验证我想,因为我” m从消息中缺少这些信息,即使我在消息上有一个验证标头。这可能发生吗?

如何在消息中添加WS-Security头并在代码中添加所有这些信息? 我在Visual Studio中使用添加Web引用添加了该服务。

谢谢。

回答

2

最优雅的解决方案是一个过时的解决方案,用于制作用于从.NET 3.5调用.NET 2.0的类库,安装WSE 3.0,入侵某些VS配置文件以使加载项工作以及启用类库项目作为启用WSE的项目。

更新Web引用使两个代理类(例如Myservice和MyServiceWse),.从SoapHttpClient继承,它是WCF代理生成的默认值和WebServicesClientProtocol的最新继承。

最新的是您需要使用WS-Security标头调用旧的ASMX Web服务。

剩下的就是这么简单:

MyServiceWse client = new MyServiceWse(); 

     UsernameToken token = new UsernameToken(userName, password, PasswordOption.SendPlainText); // or what service specs rquired, other than plaintext. 

     client.RequestSoapContext.Security.Tokens.Add(token); 
     client.RequestSoapContext.Security.Timestamp.TtlInSeconds = 60; 

     client.YourMethod(); 

所以对于一个过时的API简单,其不包含微软VS 2005之后,你需要用流和字符串操作捕捉消息连载之前,序列化之后的发挥,使用扩展和东西...

如果你有一个使用添加引用的解决方案,而不是旧的添加Web引用和WSE,使用WS-Security标头,UsernameToken,TimeStamp Created,Expired等进行简单调用。

请让我知道。

P.S.找到这个问题的解决方案,并回答一些有用的链接。

Consuming non-asmx SOAP 1.1 Web Service in C# with Header Security

+1

+1感谢Taskos。补充链接http://msdn.microsoft.com/en-us/library/ms819938.aspx - 微软的官方代码:编辑生成的源代码=(这里有WSE v3.0 http://www.microsoft.com/en- GB /下载/ details.aspx?ID = 14089 – earcam 2012-12-28 09:33:21

相关问题