WCF 请求 returns 错误响应

WCF request returns wrong response

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

System.ServiceModel.ProtocolException: A reply message was received for operation 'MyMethodToServer' with action 'http://tempuri.org/IMyInterface/PingServerResponse'. However, your client code requires action 'http://tempuri.org/IMyInterface/MyMethodToServerResponse'.

MyMethodToServer 不一致,落在不同的方法上。 请求收到不同的响应怎么会发生?

我认为你在异步通信方面遇到了一个非常混乱的问题,主要建议(因为你的问题不是很清楚),尝试识别每个请求,接听电话并等待他们,进行异步通信和获得一些关于线程的工作。

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

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

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

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

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

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

我认为MaxConcurrentCall and ConcurrencyMode可能与这里有关(虽然我很长一段时间没有接触WCF)