2012-11-05 151 views
0
Uri URL2 = new Uri(@"http://www......com");      
HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(URL2); 
request2.Timeout = 10000; 
HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse(); 

我正在使用上面的代碼進行webrequest。當我寫一個愚蠢的URL,如www.oiasjdilasod.com它會拋出異常;然而,當一個現有的頁面不可用幾個小時,我不能得到這個例外。它不會拋出任何異常並停止運行。 當這個頁面不可用時,我在Internet Explorer嘗試,它顯示頁面無法找到http 400錯誤的請求。 你有什麼建議如何捕捉這個異常?request.timeout不會拋出異常

+0

的請求不超時,但 - Web服務器是respondi NG。它的響應是4XX的HttpStatus,它表明客戶端的請求有錯誤。如果服務器關閉,服務器不存在或服務器花費太長時間來響應請求,則請求超時的唯一時間。因此,您應該檢查狀態代碼是否爲200(「Ok」) – dash

回答

1

事實上,您從服務器獲得迴應意味着它可用,它只是無法正常工作 - 因此請求已完成並且不會超時,因爲服務器已作出響應。

這只是不是你想要的迴應

而應該檢查StatusCode屬性。

if(response2.StatusCode != HttpStatusCode.OK) 
{ 
     throw new Exception("Site is responding incorrectly!"); 
} 
0

你扔什麼異常?常規異常不會執行,它必須是WebException。

... 
catch(WebException e) 
{ 
Console.WriteLine("Error: "+ e.Status); 
} 

編輯:

如何超時異常(伴隨着引發WebException)?

catch (TimeoutException e) 
{ 
Console.WriteLine(e); 
} 
catch(WebException e) 
{ 
Console.WriteLine("Error: "+ e.Status); 
} 
+0

是的,我正在拋出webexception,但重點是如果我不添加任何異常以查看當時有什麼異常。它運行時不會拋出任何異常。 – Oktay

0

我有同樣的問題之前和

catch(WebException e) 
{ 
Console.WriteLine(e.toString()); 
} 

會解決它

+0

感謝您的回答,但webexception不能解決問題。 正如我在頁面停用一段時間時所提到的,webexception不起作用。它在你嘗試一個實際不存在的頁面時起作用。 – Oktay

+0

@Oktay我覺得現在的問題從服務器不是從你的代碼,所以有關設置超時請求處理這個問題是什麼,如果這個時間超過特定時間段則顯示一條消息,該頁面是一會兒 – 2012-11-05 10:28:57

+0

是我應該這樣做,但我不知道該怎麼做。 Stopwatch stopWatch2 =新的秒錶(); stopWatch2.Start(); HttpWebResponse response2 =(HttpWebResponse)request2.GetResponse(); response2.Close(); stopWatch2.Stop();如果我嘗試用秒錶,我無法設置超時值。你有更好的主意嗎? – Oktay

0

代碼的這片爲我工作

try 
      { 
       Uri URL2 = new Uri(@"http://www.*****.com"); 
       HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(URL2); 
       request2.Timeout = 100; 
       HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse(); 
      } 
      catch (WebException e) 
      { 
       MessageBox.Show(e.Message.ToString()); 
      }