首页 > 解决方案 > 使用同一客户端实例对 WCF 服务进行多个方法调用

问题描述

我的 WPF 应用程序使用单个客户端对象调用 WCF 服务。当发送请求并且在下一个请求之前立即响应时,这可以正常工作。

当我发送第一个请求时,完成计算任务并返回结果需要 3 分钟。同时从我的 WPF 应用程序发送第二个请求(每 3 秒发送一次 ping 请求)。此时,我收到以下错误并且 WPF 应用程序断开连接:

服务器没有提供有意义的回复:这可能是由合同不匹配、会话过早关闭或内部服务器错误引起的

通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于故障状态。

我的服务行为是这样写的:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, IncludeExceptionDetailInFaults=true)]

我尝试了不同的组合,但它不起作用。

标签: wcfwcf-clientnettcpbinding

解决方案


您的 Ping 请求不应使用相同的通道。它应该打开它自己的频道。理想情况下,每个独立的请求都应该打开它自己的通道(或者,您可以构建一个排队系统)。但是从两个不同的线程访问同一个通道是行不通的。


推荐阅读