首页 新闻 会员 周边 捐助

wcf 客户端非正常断开如何检测

0
悬赏园豆:50 [已解决问题] 解决于 2011-11-25 15:33

因为项目中要用到客户端1发送消息到客户端2

我在服务中里保存了客户端列表,

当客户端正常退出时 可触发

OperationContext.Current.Channel.Closed += new EventHandler(RemoveClient);
OperationContext.Current.Channel.Faulted += new EventHandler(RemoveClient);

我在RemoveClient里移除当前客户端,但是当拨掉网线里,并没有触发事件,服务在回调时就出错了

目前是使用定时去回调客户端,如果出错就移除,还有什么好的方法吗?

谢谢!!

wcf
黑、白的主页 黑、白 | 初学一级 | 园豆:21
提问于:2011-11-24 16:03
< >
分享
最佳答案
0

这种非正常退出触发不了事件,所以只能定时检查。

我觉得你应该把“定时回调”这种容易产生异常耗时的操作交给客户端去做,服务端监控客户端是否离线,心跳包是否出场。客户端每5秒钟(假设是5秒,你也可以定其它的)向服务器回发一次,若服务器监控到某个客户端的最后更新时间比现在大5秒则做离线处理,移除客户端。

收获园豆:50
LCM | 大侠五级 |园豆:6876 | 2011-11-24 16:37
其他回答(2)
0

试试:OperationContext.Current.Channel.Closing += new EventHandler(Channel_Closing);
参考文章:WCF关于客户端在线状态的处理

dudu | 园豆:30734 (高人七级) | 2011-11-24 17:14
0

这样的话,是不是服务端还是需要一个定时检查客户端最后更新时间的功能?

Charles Yan | 园豆:202 (菜鸟二级) | 2012-05-07 20:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册