如何在HttpWebRequest.GetRequestStream上设置超时?

时间:2009-08-12 15:27:31

标签: .net http httpwebrequest timeout connection

我设置了HttpWebRequest的Timeout和ReadWriteTimeout,并且在尝试连接到不存在的服务器时仍然GetRequestStream没有超时。在解决DNS解析时,我遇到了类似的问题,但这次有问题的服务器在我自己的机器上运行(localhost),所以这不相关。

情景如下:

  1. 我举起服务器
  2. 我已成功连接到它,执行POST并关闭请求/响应流
  3. 我杀了服务器
  4. 我尝试再次连接,并期望我将达到我设置的超时
  5. 此时线程挂起。我尝试将KeepAlive设置为false,但这没有帮助。

    我想过在一个单独的线程中运行上面的场景,如果它花了太长时间自己杀掉它 - 但是这个解决方案非常难看并且不会阻止资源泄漏。

1 个答案:

答案 0 :(得分:5)

尝试使用BeginGetRequestStream和EndGetRequestStream而不是GetRequestStream。设置一个计时器并在经过足够的时间后过早地调用EndGetRequestStream,假设请求将挂起。显然,如果你正常处理请求,你还必须在传递给BeginGetRequestStream的委托中调用EndGetRequestStream,这样两个线程之间必须有一些同步才能防止调用EndGetRequestStream两次。