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_State_Channel - Fatal编程技术网

无法更新WCF通道状态

无法更新WCF通道状态,wcf,state,channel,Wcf,State,Channel,我的WCF应用程序有问题。我对我的应用程序使用netTcpBinding。在客户端,我使用ClientBase连接到主机,并使用ICommunicationObject.State检查通道是否仍然可用 问题是在“receiveTimeout”之后,TCP连接被切断,但在客户端,当我检查状态时,它仍然“打开”。当我试图直接使用它时,也有例外 为了确认TCP套接字的断开连接,我使用TCPView来监视它。它在超时后被切断。但通道的状态未更新 实际上,我在服务器的配置中添加了诊断日志。 我在超时之后

我的WCF应用程序有问题。我对我的应用程序使用netTcpBinding。在客户端,我使用ClientBase连接到主机,并使用ICommunicationObject.State检查通道是否仍然可用

问题是在“receiveTimeout”之后,TCP连接被切断,但在客户端,当我检查状态时,它仍然“打开”。当我试图直接使用它时,也有例外

为了确认TCP套接字的断开连接,我使用TCPView来监视它。它在超时后被切断。但通道的状态未更新


实际上,我在服务器的配置中添加了诊断日志。 我在超时之后得到了一个异常(在断开发生的同时)

以下是例外情况(在服务器端):

System.ServiceModel.CommunicationObjectAbortedException,System.ServiceModel,版本=3.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089 System.Net.Sockets.SocketException,系统,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089 传输数据时发生TCP错误(995:由于线程退出或应用程序请求,I/O操作已中止)

如果我尝试再次从客户端调用服务,在客户端,我会遇到以下异常:

System.ServiceModel.CommunicationException:套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的

我认为客户端出现异常是正常的。但我不知道是否需要在服务器端处理异常

有人有主意吗


非常感谢。

除非您明确地
关闭()
它或频道出现故障,否则
通信状态将保持为“打开”。不幸的是,在您的场景中,直到您尝试使用所述通道时,除了检查异常之外,无法确定它是否实际可用

我建议您不要试图使通道在使用点之后保持打开状态,并在完成后明确地
Close()
it


我们有一个封装调用的包装器,包括创建代理、服务调用本身以及随后关闭通道,效果很好。

感谢您的回复。您的意思是超时导致的断开不是通道故障,因此状态不会更新?是的。此外,如前所述,您不应保持导致服务器错误的频道处于打开状态。创建频道,拨打电话,关闭频道。WCF不是为连续连接服务而设计的。谢谢,我在MSDN网站上也发现了一些有趣的东西