2012-11-05 150 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()); 
      }