2013-05-01 144 views
1

我有一個非常簡單的HTTP得到應用,這裏是它爲什麼WebRequest只能工作兩次?

using System; 
using System.Net; 
using System.Threading; 

namespace UploadRichardsStatusConsoleApplication 
{ 
    class Program 
    { 
     static void Main() 
     { 
      const string requestString = "http://www.google.com/"; 
      while (true) 
      { 
       var request = WebRequest.Create(requestString); 
       Console.WriteLine("request sent = " + requestString); 
       try 
       { 
        var response = request.GetResponse(); 
        Console.WriteLine("response.ContentLength = " + response.ContentLength); 
       } 
       catch (WebException) 
       { 
        Console.WriteLine("Request timed out"); 
       } 
       Thread.Sleep(5000); 
      } 
     } 
    } 
} 

一個更簡單的刪節版真正的控制檯應用程序,有我自己的Azure的URL,但問題表現任何請求字符串,即使谷歌,所以我不認爲這是一個服務器端問題。當我運行代碼時,前兩個循環成功,即報告了response.ContentLength。此後,他們超時。爲什麼我只接到兩個電話?我工作的實際應用使用了HTTP GET定期報告狀態,所以我必須這樣做反覆

我要指出,我已經試過(兩倍以上!):

  • 添加未使用的查詢屬性到URL這些工作,使每個URL是 不同
  • 設置超時巨大價值
  • 繞過高速緩存

但沒有編輯。

回答

5

您沒有處理響應,這意味着它仍然佔用該主機的連接池。隨後對同一主機的請求將等待連接被釋放,這意味着要等待可能永遠不會發生的垃圾收集/結束循環。

使用using聲明,它應該是罰款:

using (var response = request.GetResponse()) 
{ 
    ... 
} 
+0

這一工程 - 感謝喬恩(我時,我可以接受在幾分鐘的答案)。 – dumbledad 2013-05-01 14:50:58

相關問題