【问题标题】:How can I set a timeout on HttpWebRequest.GetRequestStream?如何在 HttpWebRequest.GetRequestStream 上设置超时?
【发布时间】:2010-11-19 00:15:00
【问题描述】:

我已经设置了HttpWebRequest 的 Timeout 和 ReadWriteTimeout,但在尝试连接到不存在的服务器时,GetRequestStream 仍然没有超时。过去当 DNS 解析被触发时,我也遇到过类似的问题,但这次有问题的服务器在我自己的机器(本地主机)上运行,所以这无关紧要。

场景是这样的:

  1. 我提升我的服务器
  2. 我成功连接到它,执行 POST,并关闭请求/响应流
  3. 我杀死了服务器
  4. 我尝试再次连接,并希望我会达到我设置的超时时间

此时线程挂起。我尝试将 KeepAlive 设置为 false,但这没有帮助。

我考虑过在单独的线程中运行上述场景,如果它需要太长时间,我自己将其杀死 - 但是这个解决方案非常丑陋并且不会防止资源泄漏。

【问题讨论】:

    标签: .net http httpwebrequest timeout connection


    【解决方案1】:

    尝试使用 BeginGetRequestStream 和 EndGetRequestStream 代替 GetRequestStream。设置一个计时器并在您假定请求将挂起的足够时间过去后过早调用 EndGetRequestStream。显然,如果您确实正常处理请求,您还必须在传递给 BeginGetRequestStream 的委托中调用 EndGetRequestStream,因此两个线程之间必须有一些同步,以防止调用 EndGetRequestStream 两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2011-04-11
      • 2019-01-22
      • 2011-02-27
      • 2017-04-17
      • 2015-07-13
      • 2012-09-01
      相关资源
      最近更新 更多