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

rip*_*234 0 .net connection timeout http httpwebrequest

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

场景是这样的:

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

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

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

Gle*_*enn 5

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