我的问题如下。我收到了一个要在我的 .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/