【问题标题】:WCF request returns wrong responseWCF 请求返回错误响应
【发布时间】:2019-10-18 18:23:28
【问题描述】:

我有一个客户端使用 wcf 与服务器对话的 C# 应用程序。在后台,客户端每隔 X 秒调用一次 Ping 方法到服务器(通过 WCF)。以下错误已重现几次(针对不同的方法调用):

System.ServiceModel.ProtocolException:收到操作“MyMethodToServer”的回复消息,操作为“http://tempuri.org/IMyInterface/PingServerResponse”。但是,您的客户端代码需要操作“http://tempuri.org/IMyInterface/MyMethodToServerResponse”。

MyMethodToServer 不一致,它属于不同的方法。 如果请求收到不同的响应,怎么会发生这种情况?

【问题讨论】:

  • 你是如何生成你的类的?你是用 svcutil 生成的吗?

标签: c# .net wcf proxy channel


【解决方案1】:

我认为您在异步通信方面遇到了一个非常混乱的问题,主要建议(因为您的问题不太清楚)是尝试识别每个请求,捕捉呼叫并等待它们,进行异步通信并获得几个与线程有关的工作。

正如您所介绍的,这是一个典型的架构问题。

如果您提供更多代码,我可以建议在我的答案中修复一些代码吗?我很乐意更新我的答案。

【讨论】:

    【解决方案2】:

    如果这种情况是随机发生的,而您并非始终如一,您可能是在负载平衡设置中运行,并且仅将更新部署到其中一台服务器?

    【讨论】:

      【解决方案3】:

      猜测:您的客户端使用相同的连接并行执行两个请求。那么会发生什么:

      1. 线程 1 发送请求 ARequest
      2. 线程 2 发送请求 BRequest
      3. 服务器发送回复 BReply
      4. 线程 1 在等待 AReply 时收到回复 BReply

      如果您在服务器上有请求日志,则很容易确认 - 您可能会看到两个请求来自遇到问题的客户端主机的短暂延迟

      我认为MaxConcurrentCallConcurrencyMode 在这里可能是相关的(虽然我很长时间没有接触WCF)

      【讨论】:

      • 我昨天才找到原因,有一个内存泄漏错误,其中一个修复是重用请求的通道。当我为每个请求创建新频道时,它不再发生。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多