2011-06-09 54 views
1

我有檢查網站是否可用的功能。C#HttpWebResponse超時不起作用

public bool ConnectionAvailable(string strServer) 
    { 
     try 
     { 
      HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create(strServer); 
      reqFP.Timeout = 10000; 
      HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse(); 

      if (HttpStatusCode.OK == rspFP.StatusCode) 
      { 
       // HTTP = 200 - Internet connection available, server online 
       rspFP.Close(); 
       return true; 
      } 
      else 
      { 
       // Other status - Server or connection not available 
       rspFP.Close(); 
       return false; 
      } 
     } 
     catch (WebException) 
     { 
      // Exception - connection not available 
      return false; 
     } 
    } 

這不是我的代碼。我在網上找到了它。

問題是當某些網站不可用時。 我想等待x毫秒(在reqFP.Timeout中設置),那麼函數應該返回false。 但每次我必須等待〜20秒(即使我在「超時」中設置了10秒)。

你知道什麼是錯的嗎?

PS:抱歉語言錯誤。

+0

我敢肯定,在過去,我用的BeginRequest做到了這一點,並開始計時......如果定時器觸發第一它超時... – 2011-06-09 15:48:23

回答

3

MSDN article

域名系統(DNS)查詢可能 需要長達15秒返回或 超時。如果您的請求包含需要的分辨率和 你超時設置爲一個值小於 15秒 主機名,它可能需要15秒鐘或更多 一個引發WebException 前,表示對您的請求超時。

如果可能是這種情況?嘗試合理的代碼,但使用IP地址而不是主機名。 另外,當你等待20秒後得到false,你確定是因爲超時而不是因爲服務器返回了「200」以外的東西嗎?

+0

謝謝你的答覆。我也嘗試與ip地址,而不是主機名,結果是一樣的。但是......我檢查false是否從「else」部分返回,而不是。虛假回覆是例外「操作時間限制已過期」。 – Kuba 2011-06-09 15:32:18

+0

當我試圖檢查f.eg. http://localhost/a.html服務器啓動時(但a.html不存在)我立即得到了答案(404錯誤)。但是當我試圖在服務器關閉時檢查同一個地址時,我不得不等待~20秒,並且我得到了「極限時間...」的異常。 – Kuba 2011-06-09 15:36:54

+0

@Kuba:看看這個問題:http://stackoverflow.com/questions/1500955/adjusting-httpwebrequest-connection-timeout-in-c – Dyppl 2011-06-09 15:58:42

0

試試這個屬性:ReadWriteTimeout