WCF客户端异常:无法识别的消息版本

时间:2016-06-10 03:25:28

标签: c# wcf soap

我在将QCF客户端部署到QA时遇到此错误:

  

System.ServiceModel.CommunicationException:无法识别的消息版本。

在Fiddler中,我注意到WCF客户端发送的请求包含在SOAP Envelope中(如预期的那样),但远程Web服务的响应不包含在SOAP Envelope中。也就是说,我们的本地调试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>

但远程网络服务只是发送:

<?xml version="1.0" encoding="utf-8"?>
<ns0:Response xmlns:ns0="urn:example">
  <ns0:Success>true</ns0:Success>
  ...
</ns0:Response>

据我所知,WCF客户端抛出异常,因为没有SOAP Envelope。所以我的问题是:

  1. 我的假设是正确还是我应该在其他地方寻找?
  2. 有没有办法配置WCF客户端的绑定以删除SOAP Envelope期望?
  3. 我应该告诉远程服务实现者修复他们的服务(他们是从提供的WSDL中为我们编写的)吗?
  4. WCF客户端正在使用basicHttpBindings(以及基于SSL / TLS的HTTP基本身份验证)。我考虑过使用IClientMessageInspector.AfterReceiveReply()来重写响应,但是在调用该方法之前会抛出异常,即:我们已经为请求/响应日志记录实现了它,并且它没有在那里遇到断点。

    更多信息:

    在与服务开发人员沟通后,听起来他们完全忽略了我们提供的.wsdl和(svcutil生成的)IService.cs文件,并从头开始编写了一个POX(普通旧XML)服务。

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

1 个答案:

答案 0 :(得分:0)

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

请尝试&#34;添加服务参考&#34; - &#34;高级......&#34; - &#34;添加网络参考...&#34;作为兼容性方法。