2010-01-07 48 views
3

我需要測試大約300個URL來驗證它們是否導致實際頁面或重定向到其他頁面。我在.NET 2.0中編寫了一個簡單的應用程序來檢查它,使用HttpWebRequest。這裏的代碼片段:HttpWebRequest.AllowAutoRedirect = false會導致超時?

System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)wr.GetResponse(); 
code = resp.StatusDescription; 

代碼跑得很快,並寫入文件,所有我的url返回狀態200行。然後我意識到,默認情況下GetResponse()遵循重定向。傻我!所以我加了一條線,使其正常工作:

System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url); 
wr.AllowAutoRedirect = false; 
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)wr.GetResponse(); 
code = resp.StatusDescription; 

我再次運行程序,等待着......等待着......等待着......原來,每個網址我得到一個System.Net .WebException「操作已超時」。感到驚訝的是,我手動檢查了網址 - 工作正常......我將AllowAutoRedirect = false行註釋掉 - 並且再次正常工作。取消註釋此行 - 超時。任何想法可能會導致這個問題,以及如何解決?

回答

8

通常超時是由於Web響應未被處置。你應該有一個using聲明爲您HttpWebResponse

using (HttpWebResponse resp = (HttpWebResponse)wr.GetResponse()) 
{ 
    code = resp.StatusDescription; 
    // ... 
} 

我們就需要做更多的分析來預測是否是肯定的問題...或者你可以只嘗試:)

的原因是.NET有一個連接池,如果你沒有關閉響應,連接就不會返回到池中(至少在GC完成響應之前)。當請求等待連接時會導致掛起。

+0

不知道爲什麼在沒有AllowAutoRedirect = false的情況下它工作正常,或者它在第一次請求時如何知道我不會正確關閉它,但它有幫助! – user34402 2010-01-07 17:08:10

+0

@perpetka:當它重定向時,它可能會關閉原來的連接,並有足夠的*不同*主機重定向到它避免了這個問題。 – 2010-01-07 17:12:19

+0

有道理。非常感謝您的幫助! – user34402 2010-01-07 17:15:33

相關問題