我部署一个WCF客户端时,QA今天打这个错误:WCF客户端异常:无法识别的消息版本
System.ServiceModel.CommunicationException:无法识别的消息版本。
在提琴手我注意到,WCF客户端将其请求包在SOAP封装(如预期),但是从远程Web服务的响应不裹在SOAP信封。也就是说,我们的本地调试Web服务发送这样的响应:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Response xmlns="urn:example">
<Success>true</Success>
...
</Response>
</s:Body>
</s:Envelope>
但远程Web服务只是发送此:
<?xml version="1.0" encoding="utf-8"?>
<ns0:Response xmlns:ns0="urn:example">
<ns0:Success>true</ns0:Success>
...
</ns0:Response>
至于我可以告诉WCF客户端被扔异常,因为没有SOAP信封。所以我的问题是:
- 我的假设是否正确或应该在其他地方看?
- 是否有某种方法可以配置WCF客户端的绑定来删除SOAP Envelope期望值?
- 我应该只是告诉远程服务实现者修复他们的服务(他们是从提供的WSDL为我们编写的)?
WCF客户端正在使用basicHttpBindings(以及基于SSL/TLS的HTTP基本验证)。我曾考虑使用IClientMessageInspector.AfterReceiveReply()重写响应,但在调用该方法之前抛出异常,即:我们已经为请求/响应日志记录实现了它,并且没有在那里触发断点。
更多信息:
与服务开发商沟通后,它听起来就像他们完全忽视了的.wsdl和(SvcUtil工具生成的),我们给了他们,并写了一个POX IService.cs文件(普通老式XML )服务从零开始。
我不相信我们可以说服他们正确地做到这一点,所以现在我正在寻找提示,将正常运行的WCF SOAP客户端转换为POX客户端。