我正在尝试使用 HttpWebRequest 对象进行“长轮询”。
在我的 C# 应用程序中,我使用 HttpWebRequest 发出 HTTP GET 请求。然后,我使用 beginGetResponse() 等待响应。我正在使用 ThreadPool.RegisterWaitForSingleObject 等待响应或超时(1 分钟后)。
我已将目标 Web 服务器设置为需要很长时间才能响应。这样,我就有时间断开网线了。
发送请求后,我拔掉网线。
发生这种情况时有没有办法获得例外?这样我就不用等待超时了?
超时(来自 RegisterWaitForSingleObject)在 1 分钟超时到期后发生,而不是异常。
有没有办法确定网络连接是否已断开?目前,这种情况与Web服务器响应时间超过1分钟的情况没有区别。
我找到了一个解决方案:
在调用 beginGetResponse 之前,我可以在 HttpWebRequest 上调用以下代码:
req.ServicePoint.SetTcpKeepAlive( true, 10000, 1000)
我认为这意味着在 10 秒不活动后,客户端将向服务器发送 TCP“保持活动”。如果网络连接因网络电缆被拉断而中断,则保持活动状态将会失败。
因此,当拉动电缆时,我会在 10 秒内(最多)发送一个保持活动状态,然后发生 BeginGetResponse 的回调。在回调中,当我调用 req.EndGetResponse() 时,我得到异常。
不过,我想这违背了长轮询的好处之一。因为我们仍在发送数据包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)