2016-06-10 422 views
0

我部署一个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信封。所以我的问题是:

  1. 我的假设是否正确或应该在其他地方看?
  2. 是否有某种方法可以配置WCF客户端的绑定来删除SOAP Envelope期望值?
  3. 我应该只是告诉远程服务实现者修复他们的服务(他们是从提供的WSDL为我们编写的)?

WCF客户端正在使用basicHttpBindings(以及基于SSL/TLS的HTTP基本验证)。我曾考虑使用IClientMessageInspector.AfterReceiveReply()重写响应,但在调用该方法之前抛出异常,即:我们已经为请求/响应日志记录实现了它,并且没有在那里触发断点。


更多信息:

与服务开发商沟通后,它听起来就像他们完全忽视了的.wsdl和(SvcUtil工具生成的),我们给了他们,并写了一个POX IService.cs文件(普通老式XML )服务从零开始。

我不相信我们可以说服他们正确地做到这一点,所以现在我正在寻找提示,将正常运行的WCF SOAP客户端转换为POX客户端。

回答

0

这可能是由于您的服务使用Soap1.2而您使用不同的版本来调用它。

请尝试“添加服务参考” - “高级...” - “添加Web引用...”作为兼容性方法。