2008-12-22 56 views
3

我的目標是在最短的時間內從多達6000個Url獲得答案。它工作得非常好(5200個LAN地址爲12秒),直到發生一些延遲。我需要幫助設置.NET HttpWebRequest超時

我的代碼使用多達20個同步HttpWebRequest.BeginGetResponse與ThreadPool.RegisterWaitForSingleObject超時處理。

然而,有些請求(多達4個請求中的4個)從來沒有用第二個參數(timedOut)爲真來觸發TimeoutCallback函數,他們浪費了我寶貴時間的5分鐘,直到它們碰到BeginGetResponseCallback函數,然後引發WebException。例外情況表示「操作達到了時間限制」,但由於例外信息是葡萄牙語(我的母語),我無法Google。

我不知道我是否可以將這個時間限制減少到20秒。任何人都知道?我已經嘗試過:

<system.web> 
    <httpRuntime executionTimeout="20"/> 
</system.web> 

但是,當我將它作爲控制檯應用程序運行時,ASP.NET配置不起作用。我也試過:

myHttpWebRequest.Timeout = 20*1000; 

ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), AsyncState, 20*1000, true); 

沒有成功。你可以幫我嗎?

更新 什麼,我想說的是有一個異步HTTP請求的4分可能的結果:

  1. 永遠也達不到的回調函數 - >超時回調函數
  2. 河段和答案成功
  3. 到達並引發異常
  4. 延遲5分鐘直到在回調函數內引發「時間限制」web異常

第四可能性是一個被延遲我的申請,我不知道如何縮短該延遲

更新 有沒有一種可能性,即代替GetResponse方法GetResponseStream是誰造成超時?

回答

2

.Timeout =時間花在試圖建立連接(不包括查找時間).ReadWriteTimeout =花費的時間試圖讀取或寫入數據後建立連接