即使MessageVersion是Soap11WSAddressing10,WCF也在使用SOAP 1.2

S. *_*nke 6 c# asp.net wcf soap web-services

我的问题如下.我收到了一个在我的.NET 4.7.1 ASP.NET应用程序中实现的WSDL,因此另一家公司可以从我们实现的WSDL调用一个操作.它们需要一些特定的WCF服务设置.

  • SOAP 1.1
  • WS-Security 1.0
  • WS-Addressing 1.0(2005-08)
  • HTTPS(使用x509证书)
  • 他们要求我们安装一个特定的证书,我们可以用我们的证书验证他们的证书,反过来他们也会验证我们的证书,因为他们有我们的公钥.我相信我应该用Custom Binding -> Security -> MutualCertificate它.我已经指定了应该使用的服务和客户端证书.

(请注意,在WSDL实现不需要WCF,他们说,消费者可以自由地实现它在任何语言.我选择使用WCF,他们有一些关于它的文档,所以我认为它应该得到支持.)

当我直接在SOAP UI中导入他们的WSDL时,它说它使用SOAP 1.1.SOAP 1.1命名空间在WSDL中可见.

当我导入我的服务的WSDL(它依次实现其WSDL生成的接口)时,它使用SOAP 1.2.这是一个不匹配,非常烦人.

我发现这篇文章:https://stackoverflow.com/a/22255554/3013479我试图删除HttpSoap12并添加HttpSoap.我已设置MessageVersionSoap11WSAddressing10所以它应该使用SOAP1.1 ..但它不起作用.

当我在BasicHTTPBinding没有任何配置的情况下使用该绑定时,它确实使用SOAP 1.1

这是我的约束力:

<customBinding>
    <binding>
        <textMessageEncoding writeEncoding="utf-8" messageVersion="Soap11WSAddressing10" />
        <security
            authenticationMode="MutualCertificate"
            enableUnsecuredResponse="false"
            messageProtectionOrder="EncryptBeforeSign"
            includeTimestamp="true"
            defaultAlgorithmSuite="TripleDesRsa15"
            allowSerializedSigningTokenOnReply="false"
            messageSecurityVersion="WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10"/>
      <httpsTransport requireClientCertificate="true"/>
    </binding>
  </customBinding>
Run Code Online (Sandbox Code Playgroud)

我相信我需要一个自定义绑定,因为在他们的一个文档中,他们提到了自定义绑定的一些属性.我不确定!此外,此绑定生成一个AssymetricBinding,我相信没有其他默认绑定执行此操作.

有人有任何提示吗?你们需要WSDL的知识吗?从理论上讲,我无法/允许调整WSDL,因为那时服务可能无法连接到我们.如果我确实需要调整WSDL,请告诉我为什么我可以与公司沟通.

S. *_*nke 0

我已经解决了这个问题,问题是我从问题中删除的自定义编码器,因为我认为它不是导致此问题的项目。尽管自定义编码器指定 Soap11WSAddressing10,但它仍然使用 1.2。如果我使用普通的 TextMessageEncoder 它可以工作(但那个不适合我的需要)。IWsdlExporter应用于反映生成 WSDL 时应使用 SOAP 1.1