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

Alw*_*ing 5 c# wcf soap

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

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

在 Fiddler 中,我注意到 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>
Run Code Online (Sandbox Code Playgroud)

但远程 Web 服务只是发送以下内容:

<?xml version="1.0" encoding="utf-8"?>
<ns0:Response xmlns:ns0="urn:example">
  <ns0:Success>true</ns0:Success>
  ...
</ns0:Response>
Run Code Online (Sandbox Code Playgroud)

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

  1. 我的假设正确还是我应该去别处寻找?
  2. 是否有某种方法可以配置 WCF 客户端的绑定以消除 SOAP 信封期望?
  3. 我是否应该告诉远程服务实现者修复他们的服务(他们从提供的 WSDL 中为我们编写的服务)?

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


更多信息:

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

我不确定我们能否说服他们正确执行此操作,因此现在我正在寻找将行为正常的 WCF SOAP 客户端转换为 POX 客户端的技巧。

Wei*_*eng 0

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

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