一种WCF检测客户端断线方法

本文介绍了一种不依赖心跳检测机制,在WCF服务的会话模式下,通过监听客户端连接信道的生命周期来检测客户端是否断线的方法。当客户端断开连接时,服务端的InstanceContext实例上下文会被释放,进而调用Dispose方法,以此判断客户端已断线。
摘要由CSDN通过智能技术生成

       一般检测客户端断线重连的方法都是使用心跳检测。然而增加心跳检测将会稍微影响系统的性能,总之这点资源开销的瑕疵对于有强迫症的我来说有点难接受。在WCF里面其实可以实现客户端断线检测,而不需要心跳。

        首先我要声明,这个方法值适用于WCF服务的会话模式。相信一些资深WCF玩家已经猜到我要说的了。下面我来讲解下

1、在基于会话模式的WCF服务中,每一个客户端的连接信道都会有一个ID标示,通过它WCF服务可以甄别不同客户端,从而为每个不同客户端创建一个会话通道。

//这里我们先对契约借口属性进行设置。

         [ServiceContract (CallbackContract = typeof(ICalculatorCallback),SessionMode =SessionMode.Required)]

2、每一个客户端连接的时候。WCF服务都会创建一个InstanceContext实例上下文,它与客户端同生存周期。每一次创建实例上下文的时候,服务类(就是契约借口的实现类)就会被重新创建(准备的说是重新调用其构造函数)实例消亡时候会自动进行垃圾回收。如下代码:

  [ServiceBehavior(InstanceContextMode =InstanceContextMode.PerSession)]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值