Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用同一客户端实例对WCF服务进行多方法调用_Wcf_Wcf Client_Nettcpbinding - Fatal编程技术网

使用同一客户端实例对WCF服务进行多方法调用

使用同一客户端实例对WCF服务进行多方法调用,wcf,wcf-client,nettcpbinding,Wcf,Wcf Client,Nettcpbinding,我的WPF应用程序正在使用单个客户端对象调用WCF服务。当请求被发送并且响应在下一个请求之前立即到来时,这可以正常工作 当我发送第一个请求时,完成计算任务并返回结果需要3分钟。同时,从我的WPF应用程序发送第二个请求(ping请求每3秒发送一次)。此时,我收到以下错误,WPF应用程序正在断开连接: 服务器未提供有意义的答复:这可能是由于契约不匹配、会话过早关闭或内部服务器错误造成的 通信对象System.ServiceModel.Channels.ServiceChannel无法用于通信,因为它

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

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

服务器未提供有意义的答复:这可能是由于契约不匹配、会话过早关闭或内部服务器错误造成的

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

我的服务行为如下:

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

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

如果您从单个客户端执行多个并发调用,除了InstanceContextMode之外,还应该将ConcurrencyMode设置为multiple。。
请注意,如果将InstanceContextMode设置为Single,您的服务将充当singleton,那么您应该注意操作变量,因为它会对其他调用进行反射。

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

“我的WPF应用程序正在使用单个客户端对象调用WCF服务。”我想您刚刚发现了这一点,而您需要更改它。每次调用创建一个。我尝试了PerCall和多并发模式。它是在第一次连接WCF服务时抛出的。您想让我将并发模式保持为单一模式,然后再试一次吗?我的意思是,您需要为每个要进行的调用创建一个客户端实例。是的,我想到了这一点。但问题是,它已经是现有的应用程序,我正在为此添加一个新功能。我不能到处换衣服。这是不允许的。另外,它有回调,不同的线程调用WCF服务(ping线程)等。还有其他方法吗?是的,我有多个并发调用单个客户端。我还尝试将InstanceContextMode设置为Single,将ConcurrenyMode设置为Multiple。然而,我只在ServiceManager类中使用一个服务客户机对象来调用服务。但WPF应用程序正在断开连接。