【问题标题】:HttpWebRequest underlying connection closed Event/NotificationHttpWebRequest 底层连接关闭事件/通知
【发布时间】:2013-02-08 16:48:32
【问题描述】:

我有一个具有客户端/服务器架构的 .NET 服务,其中客户端计算机通过软件负载平衡器连接到服务器计算机。我将HttpWebRequest.ServicePoint.ConnectionLeaseTimeout 属性设置为一个特定的值,以便每隔一段时间就会终止连接,并且SLB 会为客户端提供与不同(或可能相同)服务器的新连接,以防服务器行为不端。

我的问题是:

有没有办法在ConnectionLeaseTimeout 间隔用完并启动与新服务器的新连接时收到通知?每次发生这种情况时,我都想记录新服务器的信息,以确保我确实在更新连接,而不仅仅是在某台机器上停留的时间超过了我应该的时间。

我希望对这种情况有一些内置支持,并且我不必存储当前主机的信息并每隔一段时间(每隔几个请求或每个时间间隔)检查我是连接到新服务器(通过与以前的服务器进行比较)并跟踪更改时间。即使我这样做了,也无法判断我是否在两个连续的时间间隔内连接到同一台服务器,因为我没有释放第一个连接,或者因为 SLB 将我还给了同一台服务器。

【问题讨论】:

    标签: c# .net notifications httpwebrequest timeout


    【解决方案1】:

    租约超时的问题在于,您不知道(在您的代码中)它何时会发生,因为它与您的代码是异步的。因此,如果它确实通知您断开连接,它必须在某个工作线程上,您只需要存储该信息并在您的主线程到达某个点时使用它可以对这些信息做任何事情。这一点通常是您下次想要对 Web 请求执行某些操作时。因此,要检测到这一点,您唯一能做的就是在下次使用请求时简单地捕获生成的WebException

    【讨论】:

    • 我明白你的意思,但现在我只想记录可以在并发线程上发生的事件......为了给你更多的上下文,SLB 的人声称我是持有机器太久,我想向他们证明情况并非如此,SLB 实际上一直在给我同样的机器。
    • 没有活动。您必须尝试在连接上发送一些东西以查看它是否仍然连接。如果是 http,您可能无法这样做。
    • 谢谢大家。只是想确保在我实施某些东西之前没有开箱即用的解决方案......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多