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发送请求ARequest
- 线程2发送请求BRequest
- 服务器发送回复BReply
- 线程 1 在等待 AReply 时收到回复 BReply
如果您在服务器上有请求日志,则很容易确认 - 您可能会看到遇到问题的客户端主机发出的两个请求有短暂的延迟
我认为MaxConcurrentCall and ConcurrencyMode可能与这里有关(虽然我很长一段时间没有接触WCF)
我有一个客户端使用 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发送请求ARequest
- 线程2发送请求BRequest
- 服务器发送回复BReply
- 线程 1 在等待 AReply 时收到回复 BReply
如果您在服务器上有请求日志,则很容易确认 - 您可能会看到遇到问题的客户端主机发出的两个请求有短暂的延迟
我认为MaxConcurrentCall and ConcurrencyMode可能与这里有关(虽然我很长一段时间没有接触WCF)