首页 > 解决方案 > 配置 wcf soap 1.2 服务

问题描述

我正在实现应该接受带有 HTNG 2.1 标头的 SOAP 1.2 请求、WS-Addressing(在系统和地址目标之间传递消息 ID)和 WS-Security(仅用户身份验证)的服务实现。我已经完成了处理有效负载消息和生成正确响应的整个业务逻辑,但是我在将服务配置为预定义请求时遇到了真正的麻烦。这里是:

<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
  <soap2:Header xmlns:soap2="http://www.w3.org/2003/05/soap-envelope"
  xmlns:htng="http://htng.org/1.3/Header/"
  xmlns:wsa="http://www.w3.org/2005/08/addressing"
  xmlns:wss="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"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:htnga="http://htng.org/PWSWG/2007/02/AsyncHeaders"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <wsa:Action>http://MyHost/MyService_SubmitRequest</wsa:Action>
    <wsa:ReplyTo>
      <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
    </wsa:ReplyTo>
    <htnga:ReplyTo>
      <wsa:Address>HTTPS://ResponseHost/Response.SVC</wsa:Address>
    </htnga:ReplyTo>
    <wss:Security mustUnderstand="1">
      <wss:UsernameToken>
        <wss:Username>string</wss:Username>
        <wss:Password>string</wss:Password>
      </wss:UsernameToken>
    </wss:Security>
    <wsa:MessageID>df559145-78a4-4c85-a264-bf99bbf8df9e</wsa:MessageID>
    <htnga:CorrelationID>df559145-78a4-4c85-a264-bf99bbf8df9e</htnga:CorrelationID>
    <wsa:To>https://pms.url</wsa:To>
  </soap2:Header>
  <Body>
    <!-- Payload -->
  </Body>
</Envelope>

我想在配置文件中进行配置,而不是在代码中,我已经尝试了所有可以在各种帖子中找到的配置选项,但没有任何成功。我知道我可能遗漏了一些我现在无法发现的关于 WCF 的基础知识,因此至少在正确的方向上有所帮助。

标签: web-serviceswcfsoap

解决方案


据我所知,可以通过设置消息版本将 MesaageID/ReplyTo 标头添加到 SOAP 标头中。
如何在 WCF 请求和响应的肥皂头中添加 MessageID?
并且可以通过使用用户名/密码模式对客户端进行身份验证来添加 UsernameToken。

   <customBinding>
       <binding name="mybinding">
         <textMessageEncoding messageVersion="Soap12WSAddressing10">
         </textMessageEncoding>
         <security authenticationMode="UserNameOverTransport" includeTimestamp="false" >
         </security>
         <httpsTransport></httpsTransport>
       </binding>
     </customBinding>

结果。正确的方式为 SOAP webservice 通信 WSSE Usernametoken 我不知道如何将标头添加到 SOAP 标头,它可能与 WCF 跟踪有关。 如果有什么我可以帮忙的,请随时告诉我。
在此处输入图像描述

HGNGA:CorrelationID


推荐阅读