因为项目中要用到客户端1发送消息到客户端2
我在服务中里保存了客户端列表,
当客户端正常退出时 可触发
OperationContext.Current.Channel.Closed += new EventHandler(RemoveClient);
OperationContext.Current.Channel.Faulted += new EventHandler(RemoveClient);
我在RemoveClient里移除当前客户端,但是当拨掉网线里,并没有触发事件,服务在回调时就出错了
目前是使用定时去回调客户端,如果出错就移除,还有什么好的方法吗?
谢谢!!
这种非正常退出触发不了事件,所以只能定时检查。
我觉得你应该把“定时回调”这种容易产生异常耗时的操作交给客户端去做,服务端监控客户端是否离线,心跳包是否出场。客户端每5秒钟(假设是5秒,你也可以定其它的)向服务器回发一次,若服务器监控到某个客户端的最后更新时间比现在大5秒则做离线处理,移除客户端。
试试:OperationContext.Current.Channel.Closing += new EventHandler(Channel_Closing);
参考文章:WCF关于客户端在线状态的处理
这样的话,是不是服务端还是需要一个定时检查客户端最后更新时间的功能?