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