无法更新WCF通道状态
我的WCF应用程序有问题。我对我的应用程序使用netTcpBinding。在客户端,我使用ClientBase连接到主机,并使用ICommunicationObject.State检查通道是否仍然可用 问题是在“receiveTimeout”之后,TCP连接被切断,但在客户端,当我检查状态时,它仍然“打开”。当我试图直接使用它时,也有例外 为了确认TCP套接字的断开连接,我使用TCPView来监视它。它在超时后被切断。但通道的状态未更新无法更新WCF通道状态,wcf,state,channel,Wcf,State,Channel,我的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网站上也发现了一些有趣的东西