WCF 请求返回错误响应
Posted
技术标签:
【中文标题】WCF 请求返回错误响应【英文标题】:WCF request returns wrong response 【发布时间】: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 生成的吗? 【参考方案1】:我认为您在异步通信方面遇到了一个非常混乱的问题,主要建议(因为您的问题不太清楚)是尝试识别每个请求,捕捉呼叫并等待它们,进行异步通信并获得几个与线程有关的工作。
正如您所介绍的,这是一个典型的架构问题。
如果您提供更多代码,我可以建议在我的答案中修复一些代码吗?我很乐意更新我的答案。
【讨论】:
【参考方案2】:如果这种情况是随机发生的,而您并非始终如一,您可能是在负载平衡设置中运行,并且仅将更新部署到其中一台服务器?
【讨论】:
【参考方案3】:猜测:您的客户端使用相同的连接并行执行两个请求。那么会发生什么:
-
线程 1 发送请求 ARequest
线程 2 发送请求 BRequest
服务器发送回复 BReply
线程 1 在等待 AReply 时收到回复 BReply
如果您在服务器上有请求日志,则很容易确认 - 您可能会看到两个请求来自遇到问题的客户端主机的短暂延迟
我认为MaxConcurrentCall 和ConcurrencyMode 在这里可能是相关的(虽然我很长时间没有接触WCF)
【讨论】:
我昨天才找到原因,有一个内存泄漏错误,其中一个修复是重用请求的通道。当我为每个请求创建新频道时,它不再发生。以上是关于WCF 请求返回错误响应的主要内容,如果未能解决你的问题,请参考以下文章