c# - WCF 使用 SOAP 1.2,即使 MessageVersion 是 Soap11WSAddressing10

标签 c# asp.net web-services wcf soap

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

  • SOAP 1.1
  • WS-安全 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 namespace 在 WSDL 中可见。

当我导入我的服务的 WSDL(它反过来实现由他们的 WSDL 生成的接口(interface))时,它使用 SOAP 1.2。这是不匹配的,非常烦人。

我找到了这个帖子:https://stackoverflow.com/a/22255554/3013479我尝试删除 HttpSoap12 并添加 HttpSoap。我已将 MessageVersion 设置为 Soap11WSAddressing10,因此它应该使用 SOAP1.1.. 但它不起作用。

当我使用 BasicHTTPBinding 而不对该绑定(bind)进行任何配置时,它确实使用 SOAP 1.1

这是我的绑定(bind):

<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>

我相信我需要一个自定义绑定(bind),因为在他们的一份文档中,他们提到了自定义绑定(bind)的一些属性。我不确定!此外,此绑定(bind)会生成一个 AssymetricBinding,我相信没有其他默认绑定(bind)会这样做。

有人有什么建议吗?你们需要 WSDL 的知识吗?理论上,我不能/不允许调整 WSDL,因为那样服务可能无法再连接到我们。如果我确实需要调整 WSDL,请告诉我原因,以便我与公司沟通。

最佳答案

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

关于c# - WCF 使用 SOAP 1.2,即使 MessageVersion 是 Soap11WSAddressing10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833939/

相关文章:

c# - 调用 web 服务 webmethod 抛出 HTTP/1.1 404 Not Found

asp.net - 如何在asp页面中播放/暂停wav文件

asp.net - 在ASP.NET中缓存大型对象

web-services - 我的测试自动化策略听起来可笑吗?

c# - 使用C#从字符串中提取多个值

c# - 按顺序替换占位符

java - 从发布请求中读取 JAX-RS 客户端中的响应正文

java.lang.ClassNotFoundException : io. quarkus.runtime.Quarkus

c# - 使用 .net 4.0 系统处理泄漏

c# - Microsoft Automation UI 鼠标单击给定位置