我的问题如下。我收到了一个 WSDL 要在我的 .NET 4.7.1 ASP.NET 应用程序中实现,因此另一家公司可以从我们实现的 WSDL 调用操作。它们需要 WCF 服务的一些特定设置。
- 肥皂 1.1
- WS-Security 1.0
- WS-寻址 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
。我已将MessageVersion
设置为Soap11WSAddressing10
,因此它应该使用 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>
我相信我需要一个自定义绑定,因为在他们的一个文档中,他们提到了自定义绑定中的一些属性。不过我不确定!此外,此绑定会生成一个AssymetricBinding
,我相信没有其他默认绑定会执行此操作。
有人有什么提示吗?你们需要WSDL的知识吗?从理论上讲,我不能/被允许调整 WSDL,因为那样服务可能无法再连接到我们了。如果我确实需要调整WSDL,请告诉我原因,以便我与公司沟通。
我已经解决了这个问题,问题是我从问题中删除的自定义编码器,因为我认为这不是导致此问题的项目。即使自定义编码器指定 Soap11WSAddressing10,它仍使用 1.2。如果我使用普通的TextMessageEncoder,它可以工作(但那个不适合我的需求(。IWsdlExporter
应该用来反映在生成 WSDL 时应该使用 SOAP 1.1