c# - WCF 客户端异常 : Unrecognized message version

标签 c# wcf soap

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

System.ServiceModel.CommunicationException: Unrecognized message version.

在 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>

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

<?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 客户端的绑定(bind)以移除 SOAP 信封预期?
  3. 我是否应该只告诉远程服务实现者修复他们的服务(他们根据提供的 WSDL 为我们编写的服务)?

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


更多信息:

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

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

最佳答案

这可能是因为您的服务使用的是Soap1.2,而您使用的是其他版本调用。

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

关于c# - WCF 客户端异常 : Unrecognized message version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37739415/

相关文章:

c# - 如何从通过 Task.Factory.StartNew 创建的线程访问应用程序上下文

wcf - IsOneWay 为真时出现异常

javax.xml.ws.WebServiceException : Method X is exposed as WebMethod, 但是没有对应的wsdl操作

java - 使用 ModelMapper 进行 SOAP 请求映射

c# - 如何在 C# 中为已在 WPF 中的 XAML 中声明的矩形着色?

c# - 如何在运行时获取 WPF 元素的尺寸而不在编译时指定它们

javascript - 使用来自 asp.net gridview 函数的 jquery 的客户端搜索文本框不起作用

C# - C 互操作性

.net - 当端点地址不为空时,找不到 WCF javascript 代理

java - 'int org.ksoap2.serialization.KvmSerializable.getPropertyCount()' 在空对象引用上