首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用Webservice时.NET客户端不理解SOAP标头

调用Webservice时.NET客户端不理解SOAP标头
EN

Stack Overflow用户
提问于 2015-01-29 10:49:06
回答 1查看 5.1K关注 0票数 4

我一直试图从.NET客户端调用第三方.NET服务。为了遵守他们的身份验证要求,我不得不为每个请求设置一些自定义头。

为了使请求头值出现如下所示,我使用了this answer

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Header>
      <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="0">
         <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-2">
            <wsse:Username>Jimbob</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">P@ssword</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
   </s:Header>
   <s:Body>
   ...
   </s:Body>
</s:Envelope>

(我是通过在配置中设置自定义<endpoint><headers /></endpoint>部分来做到这一点的)

我已经通过Fiddler检查了请求,它正在发送正确的头值,并且webservice正在返回预期的结果。

但是,当客户端接收到结果时,它将抛出以下异常:

System.ServiceModel.ProtocolException :此消息的接收方不理解名称空间'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd‘的标题’http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd‘,导致消息未被处理。此错误通常表示此消息的发送方启用了接收方无法处理的通信协议。请确保客户端绑定的配置与服务绑定一致。

该报告的相关部分(来自Fiddler)如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1">
         <wsse:UsernameToken wsu:Id="UsernameToken-371676">
            <wsse:Username>SOMEUSERTOKEN</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">SOMEUSERTOKEN</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
   </soap:Header>
   <soap:Body>
   ...
   <soap:Body>
</soap:Envelope>

基本上我现在迷路了。我想我需要执行某种类型的消息检查来标记被理解的标头,但是仅仅为了解释一个结果(我已经从webservice获得的结果),它看起来确实是相当繁重的工作。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-02-26 20:21:30

如果您只想进行身份验证,那么我在我的c#控制台应用程序中使用了以下代码,并且它工作了。我在配置文件中使用了这段代码,尽管在<system.serviceModel>-><client>-> <endpoint>下。

代码语言:javascript
复制
<headers>
  <wsse:Security mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>SOMEUSERTOKEN</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">SOMEUSERTOKEN</wsse:Password>
     </wsse:UsernameToken>
  </wsse:Security>
</headers>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28212795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档