2009-09-03 103 views
7

我的asp.net應用程序發送的HttpWebRequest到遠程REST服務器並等待響應,我發現有很多相同的錯誤消息的是這樣的:如何關閉捕捉的HttpWebRequest超時後底層連接

系統。 Net.WebException:操作超時。在 System.Net.HttpWebRequest.GetResponse()

那是可能的,我捕獲這個異常後直接關閉底層的HTTP連接?或者我沒有必要這樣做,因爲我已經設置keepalive爲false?

謝謝。

其實另一個問題是如果超時異常總是發生在System.Net.HttpWebRequest.GetResponse(),這是否意味着應用程序正在等待遠程服務器的響應,並且在超時之前無法獲得響應。可能的原因是什麼,網絡連接不穩定?遠程服務器沒有響應?任何其他可能的原因?

下面是代碼:

System.Net.HttpWebResponse httpWebResponse = null; 
System.IO.Stream stream = null; 
XmlTextReader xmlTextReader = null; 
try 
{ 
    System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(request); 
    httpWebRequest.ReadWriteTimeout = 10000; 
    httpWebRequest.Timeout = 10000; 
    httpWebRequest.KeepAlive = false; 
    httpWebRequest.Method = "GET"; 
    httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse(); 
    stream = httpWebResponse.GetResponseStream(); 
    xmlTextReader = new XmlTextReader(stream); 
    xmlTextReader.Read(); 
    xmlDocument.Load(xmlTextReader); 
    //Document processing code. 
    //... 
} 
catch 
{ 
    //Catch blcok with error handle 
} 
finally 
{ 
    if (xmlTextReader != null) 
     xmlTextReader.Close(); 
    if (httpWebResponse != null) 
     httpWebResponse.Close(); 
    if (stream != null) 
     stream.Close(); 
} 
+0

沒有你的身影解決?我正在打同樣的問題。我沒有想法。 – 2012-09-03 17:10:59

+0

@AlekseyBykov你說過,那標記的答案不'解決你的問題?備擇方案 ? – Kiquenet 2015-09-05 09:39:06

回答

2

簡單的經驗法則 - 的 - 是,如果它沒有實現IDisposal那麼它並不需要處置。

+0

沒有實現IDisposal,但我發現在CLOSE_WAIT條件下有很多連接,不知道發生了什麼,擔心如果我的代碼沒有正確處理底層連接。 – machinegone 2009-09-04 00:26:28

+0

我認爲你必須相信這個框架設計師。查看http://stackoverflow.com/questions/716436/is-there-a-correct-way-to-dispose-of-a-httpwebrequest獲取更多信息。 – 2009-09-04 08:36:54

+2

儘管一般情況是這樣,但它並沒有解決這個問題 – 2012-09-03 17:07:14

0

請務必處理以及關閉。

或者使用使用塊代替嘗試,終於

using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { 
    using (var stream = httpWebResponse.GetResponseStream()) { 
     using (var xmlTextReader = new XmlTextReader(stream)) { 
      xmlDocument.Load(xmlTextReader); 
     } 
    } 
} 
+2

配置響應對象沒有解決問題 – 2012-09-03 17:10:24

0

你可以做的另一件事是調用Abort()方法上的HttpWebRequest已導致錯誤,像這樣:

catch (WebException we) 
{ 
    using (HttpWebResponse errorResp = we.Response as HttpWebResponse) 
    { 
    ... 
    } 
    request.Abort(); 
} 
+1

沒有解決問題 – 2012-09-03 17:09:59

相關問題