我通过WCF连接到第三方端点,我遇到了一个问题。 WCF生成的SOAP信封的模式与端点不兼容。
目前WCF正在生成这个:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
但它必须是这样的:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing">
我在soapUI中对此进行了测试以确认这是问题,但我如何在WCF中控制它?我使用Visual Studio中的“添加服务引用”选项来生成服务。
有什么想法吗?
提前致谢。
安迪
答案 0 :(得分:19)
最有可能的是,您遇到了SOAP版本的问题。你使用什么绑定??
basicHttpBinding
默认为SOAP 1.1,而wsHttpBinding
默认为SOAP 1.2
这是SOAP 1.1(basicHttpBinding中的默认值):
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
虽然这是SOAP 1.2(wsHttpBinding中的默认值):
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
可能的解决方案:
1)要么你只能切换绑定,那就是所有 - 你需要确保检查安全设置等等(基本和wsHttpBinding之间不同)
或
2)您需要创建自己的自定义绑定并明确指定所需的SOAP版本