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 请求返回错误响应的主要内容,如果未能解决你的问题,请参考以下文章

wcf中的消息模式

WCF - (504) 服务器没有为此请求返回响应

来自 .net WCF 服务的 405 响应错误

使用管理员以外的其他用户调用 WCF 服务时响应 400(错误请求)

C# WCF的通信模式

WCF:远程服务器返回错误:(413)请求实体太大[重复]