如何处理WCF客户端断开连接问题

5

如何处理WCF客户端断开连接?

我尝试使用回调,但似乎仅在客户端使用“Disconnect”按钮明确断开连接时才有效。

我希望在客户端手动断开连接或客户端进程崩溃时,我的服务器能够收到通知。


你的问题不太清楚。你是想在超时后重新连接还是手动连接/断开连接? - Jonathan Parker
我希望我的服务器在客户端断开连接时得到通知,即使是手动断开或客户端进程崩溃。 - Yoann. B
5个回答

7

使用OperationContext.Current.Channel.Faulted和OperationContext.Current.Channel.Closed事件。

当客户端由于任何原因断开连接时,这些事件将被触发。


OperationContext.Current.Channel.Closed事件在任何时候都不会触发...我想要一个事件在我退出客户端WinForm时触发...我正在WCF中使用wsDualHttpBinding。你如何使用这个事件? - Oliboy50

0
if (HttpContext.Current.Response.IsClientConnected == false)
{
..}

它可以帮助你


0

我认为,如果客户端以异常的方式断开连接,就没有办法确保服务器会意识到。这就像HTTP一样。如果我们强制关闭浏览器,浏览器将不会向服务器发送任何信息。

这是我们有会话超时的原因之一。如果客户端做错了什么(例如操作时间太长)或者在没有通知服务器的情况下断开连接,我们需要断开客户端并清理服务器端正在使用的所有内容。


0
一种轮询的变体是使用消息传递。客户端可以发布一个“我在这里”的消息,然后在断开连接时删除该消息。服务器可以监视队列以检测断开连接。另一个选项是使用BOSH,即双向HTTP通信。这是Web聊天客户端使用的方法。

0
为什么不设置一个循环,让客户端每秒钟向服务发送一次 ping 请求,然后进行回调。当回调失败时,客户端则已经断开连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接