2009-08-12 117 views
0

我同時設置超時和ReadWriteTimeout的HttpWebRequest,仍然試圖連接到一個不存在的服務器時GetRequestStream不超時。我碰到過類似的問題時,DNS解析被擊中,但這次有問題的服務器是我自己的機器(本地主機),所以這個不相關的運行。如何在HttpWebRequest.GetRequestStream上設置超時值?

的情況是這樣的:

  1. 我養我的服務器
  2. 我成功地連接到它,執行POST,並關閉請求/響應流
  3. 我殺了服務器
  4. 我嘗試再次連接,並期望我會打到我設置的時間爲

此時線程掛起。我嘗試將KeepAlive設置爲false,但這沒有幫助。

我想過在一個單獨的線程中運行上述情況下,如果時間太長殺它自己 - 但是這個解決方案是非常難看,也不會防止資源泄漏。

回答

5

嘗試使用BeginGetRequestStream和EndGetRequestStream而不是GetRequestStream。設置一個計時器並在足夠的時間過後,您認爲請求會掛起,提前調用EndGetRequestStream。顯然,你還必須調用EndGetRequestStream傳入到BeginGetRequestStream如果你做正常處理請求,從而必須有兩個線程之間的一些同步從調用EndGetRequestStream兩次保持委託。

+0

當然,不知道我怎麼錯過了這一個:) – ripper234 2009-08-12 16:38:12