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

Запрос не время выхода, хотя - веб-сервер отвечает нг. Он ответил HttpStatus 4XX, который указывает на ошибку с запросом от клиента. Единственный раз, когда ваш запрос истекает, - это если сервер не работает, сервер не существует или сервер слишком долго реагирует на ваш запрос. Поэтому вы должны проверить, соответствует ли код состояния 200 («ОК») – 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); 
} 

EDIT:

Как насчет тайм-аута Exception (наряду с WebException)?

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

да. Я бросаю веб-представление, но дело в том, что я не добавляю никаких исключений, чтобы увидеть, что является исключением в этот момент. он работает без каких-либо исключений. – Oktay

0

я имел такую ​​же проблему до и

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

разрешит это

+0

Спасибо за ваши ответы, но webexception не решает проблемы. Как я уже говорил, когда страница не работает некоторое время, веб-приложение не работает. Он работает, когда вы пробовали страницу, которой она действительно не существует. – Oktay

+0

@Oktay Я думаю, что теперь проблема с сервера не из вашего кода, так что как справиться с этой проблемой, задав запрос таймаута, и если это время превысит определенный период, тогда покажите сообщение о том, что страница не работает некоторое время –

+0

да, я должен сделайте это, но я не уверен, как это сделать. Секундомер 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()); 
      }