2014-05-04 90 views
0

我被要求編寫一個小程序來檢查我們在線的所有頁面沒有錯誤。獲得Web響應超時

要做到這一點,我用下面的代碼(其中pathsToCheck是列表,每個字符串是像http://www.domain.com/webpage一個URL)從第三項

foreach (string path in pathsToCheck) 
{ 
    HttpWebResponse response = null; 
    try 
    { 
     HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(path); 
     webRequest.AllowAutoRedirect = true; 
     response = (HttpWebResponse)webRequest.GetResponse(); 

     System.Diagnostics.Debug.Assert(response.StatusDescription == "OK", "Look into this, it doesn't like the response code"); 

     System.Threading.Thread.Sleep(1000); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Failed : " + path); 
    } 
    finally 
    { 
     Write(--totalPathsToCheck); 
    } 
} 

我遇到的問題是,它總是失敗(timesout)在列表中(一切都從第三個失敗)。當然,我猜想第三項必須有錯,但沒有。

由於第一個項目沒有超時,我創建了一個新的列表,其中有5個項目,所有相同的URL(我知道一個不會超時)。同樣的問題發生在第三次迭代時,它會超時並繼續超時到列表的其餘部分。

然後我決定測試一個不同的URL(在不同的域),同樣的問題仍然存在。

我在代碼中加入了睡眠,並增加了它,以防萬一在給定的時間段內有太多的請求,但沒有任何區別。

我該怎麼做?

回答

1

您需要關閉連接。添加

response.Close(); 

http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.close.aspx

Close方法關閉響應流並釋放其他請求連接到資源再利用。 您必須調用Stream.Close或HttpWebResponse.Close方法來關閉流並釋放連接以供重用。不必調用Stream.Close和HttpWebResponse.Close,但這樣做不會導致錯誤。未能關閉流可能導致應用程序無法連接。