我有一个带有客户端/服务器体系结构的.NET服务,其中客户端机器通过软件负载均衡器连接到服务器机器。我将HttpWebRequest.ServicePoint.ConnectionLeaseTimeout
属性设置为一个特定的值,以便每隔一段时间就会终止连接,并且SLB会为客户端提供一个到不同(或可能相同)服务器的新连接,以防服务器行为不端。
我的问题是:
有没有一种方法可以在ConnectionLeaseTimeout
间隔用完并启动与新服务器的新连接时得到通知?每次发生这种情况时,我都会记录新服务器的信息,以确保我确实在续订连接,而不仅仅是停留在某台机器上的时间超过了应有的时间。
我希望这个场景有一些内置的支持,我不必存储当前主机的信息,也不必每隔一段时间(每隔几个请求或每隔一段间隔)就检查我是否连接到了新服务器(与以前的服务器相比),并跟踪更改时间。即使我这样做了,也无法判断在连续两个时间间隔内,我连接到同一台服务器是因为我没有释放第一个连接,还是因为SLB给了我相同的服务器。
租约超时的问题是,你不知道什么时候(在你的代码中)会发生,因为它与你的代码是异步的。因此,如果它确实通知您断开连接,它必须在某个工作线程上,您只需存储该信息,并在主线程可以使用该信息时使用它。这一点通常是下次你想对web请求做点什么的时候。因此,要检测到这一点,唯一真正能做的就是在下一次使用请求时捕获结果WebException
。