处理双工WCF服务中的客户端断开连接

时间:2011-09-01 13:48:25

标签: c# wcf

我试图获取WCF服务以了解客户端何时断开连接。

阅读完本文wcf notification on disconnect后,我设法让测试项目正常运行。

客户端和服务器保持打开状态,直到我关闭客户端,然后在下面的行中超时后,OperationContext.Current.Channel.Closed事件似乎触发。

<reliableSession enabled="true" ordered="true" inactivityTimeout="00:01:00" />

经过测试后,我按照自己的意愿工作,然后尝试将其整合到一个更大的项目中。

这似乎有不同的表现,即使客户端仍处于打开状态,OperationContext.Current.Channel.Closed甚至会在config <reliableSession ordered="true" inactivityTimeout="00:01:00" />中指定的时间后触发。

我注意到的不同之处在于我无法在配置中指定enabled =“true”属性。第二个项目使用WSDualHTTPBinding,而第一个项目使用WSHTTPBinding。

我的问题是为什么第二个项目以这种方式表现,我怎么能让它像第一个一样?

如果您需要任何代码文件或配置发布,请告诉我,我会直接告诉他们。

亲切的问候

1 个答案:

答案 0 :(得分:2)

HTTP协议本质上是无状态的,纯粹是请求/回复。 WSDualHTTPBinding的工作原理是它在服务器和客户端上打开通道,当服务器准备发送消息时,它将使用客户端托管的通道发送消息。所以可能发生的事情是客户端上的连接被打开,没有听到一分钟,这被检测为“非活动”,然后客户端关闭连接。我不确定您的要求是什么,但您可能要考虑切换到TCPBinding,因为这是一个有状态的连接。

客户端是否能够从服务器接收消息?消息是否定期发送?你确定客户端实际上是在打开连接吗?