обработка тайм-аута веб-запроса? - PullRequest
5 голосов
/ 08 марта 2011
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 20000;
using (WebResponse response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    var result = reader.ReadToEnd();
    // Do something with result
}

В приведенном выше примере у меня определен тайм-аут, и если случится, что он достигнет тайм-аута, как я узнаю, результат будет пустым?

Получу ли я какие-либо типы ответа?

Как я могу убедиться, что у меня истекло время ожидания?

Ответы [ 3 ]

10 голосов
/ 08 марта 2011

GetResponse() будет выбрасывать WebException.Очень просто протестировать точно , что происходит, хотя - установите тайм-аут на 1 мс и попробуйте нажать что-нибудь, что займет некоторое время, чтобы вернуться.

Фактически документация заявляет это явно:

Если период ожидания истекает до того, как ресурс может быть возвращен, выдается WebException.

2 голосов
/ 08 марта 2011

Ваш HttpWebRequest.GetResponse вызов сгенерирует WebException когда;

Abort was previously called.    
-or-    
The time-out period for the request expired.
-or-    
An error occurred while processing the request.

Поймать это исключение.

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

0 голосов
/ 08 марта 2011

Возможно, вы должны использовать HTTPWebResponse . Он имеет код состояния, который сообщает вам эту информацию и многое другое. HTTPWebResponse является потомком WebResponse.

...