2011-11-27 79 views
1

當我使用HttpWebRequest和補充一點:HttpWebRequest的操作超時用的CookieContainer

CookieContainer container = new CookieContainer(); 
request.CookieContainer = container; 

會扔在

HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

操作超時例外,如果我不添加CookieContainer的程序運行沒有錯誤。爲什麼這不起作用?

回答

0

你是如何創建Request對象的?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]); 
      request.CookieContainer = new CookieContainer(); 
      HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

CookieContainer

嘗試設置myWebRequest.Timeout = XXX

  • 如果運行多個併發請求嘗試設置連接限制

System.Net.ServicePointManager.DefaultConnectionLimit
ServicePoint.ConnectionLimit

檢查這些鏈接瞭解更多信息:

HttpWebRequest "operation has timed out"
I need help setting .NET HttpWebRequest timeout
Adjusting HttpWebRequest Connection Timeout in C#

這裏有許多原因的GetResponse()可能會掛起。一些是:

1)您已達到連接限制在客戶端上(每HTTP/1.1服務器2個是conns,每HTTP/1.0服務器,或在的ServicePoint設置自定義極限)4個連接,並且沒有連接可自由發送請求到服務器。換句話說,您可能有2個未完成的請求(例如:到1.1服務器)需要2分鐘以上才能完成,然後向同一臺服務器發出另一個GetResponse()。最後一個getresponse()可能超時。

2)您還沒有關閉早期httpwebresponse的響應流。所以,即使連接是免費的,請求也不會被髮送。

3)服務器發送響應的時間太長。

+0

謝謝Niranjan.I已設置myWebRequest.Timeout = xxx,但它不起作用。 – Johnsea

0

情況1:

可能有幾個原因。我寫了下面行讀關於您的問題後,該代碼工作,

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://google.com"); 
     req.Method = "GET"; 
     req.Timeout = 282; 
     CookieContainer cont = new CookieContainer(); 
     req.CookieContainer = cont; 

     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

     using (StreamReader reader = new StreamReader(resp.GetResponseStream())) 
     { 
      Console.Write(reader.ReadToEnd()); 
     } 
     resp.Close(); 
     req.Abort(); 
     Console.ReadLine(); 

我寫req.Timeout = 282;,因爲我測試了幾個值和http://google.com確實需要282 milisecond從我的電腦作出迴應。從較慢的網絡連接,此代碼可能會返回超時。

請務必設置足夠高的時間。

情況2: 如果您認識到cookie已啓用,則可能是您連接的服務器花費的時間稍長。當你沒有設置任何東西到req.CookieContainer那麼cookie被禁用。所以請確定這個事實。 :)希望它會起作用。

4

我也有這個問題。當我要求一個網頁,我把HttpWebRequest放在Page_Load函數中,並將Cookie從當前頁面添加到CookieContainer,但它只是掛在那裏直到超時

問題是當我第一次請求網頁asp點網只是鎖定會話保護會議正在同時從不同的地方寫。當我嘗試調用HttpWebRequest請求相同的域相同的會話將阻塞,直到第一頁結束它的會話鎖,同時,第一頁正在等待HttpWebRequest結束它的作業 兩個請求只是等待對方,直到超時。

好消息是我找到了解決這個問題的方法,我只在第一頁設置了EnableSessionState =「ReadOnly」,它使得我打電話的第一個頁面不鎖定會話。 希望這可以幫助某人。

+0

這對我有效 – Stuart

+0

這個EnableSessionState在哪裏被更改? – Kelmen