Исключение тайм-аута не происходит вовремя

Я написал следующий код, используя httpwebrequest(Timeout=2000) и webproxy
Следующий код всегда выдает исключение из-за неправильного URL ("ww.google.com")

Когда я запускаю программу, я получаю два вида исключений поочередно
1. Удаленный сервер возвратил ошибку: (404) Not Found (Web Exception)
=> Требуется менее 2000 мс, чтобы поймать это исключение
=> Эта обработка исключений нормальная.
,
2. Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время или подключенный хост не смог ответить (исключение Socket)
=> Требуется 25 секунд или больше, чтобы поймать это исключение
=> Я установил запрос на 2000 мс, но он не работает!!!!

Я хочу поймать исключения, если нет ответа в течение 2 секунд
Что я должен делать?

try 
{ 
       request = (HttpWebRequest)WebRequest.Create("https://ww.google.com"); 
       request.Proxy = proxy; 
       request.Method = "GET"; 
       request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"; 
       request.Timeout = 2000; 
       response = (HttpWebResponse)request.GetResponse(); 
       if ((response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Moved || response.StatusCode == HttpStatusCode.Redirect)) 
       { 
              StreamReader sreader = new StreamReader(response.GetResponseStream(), Encoding.Default); 
              gethtml = sreader.ReadToEnd(); 
              sreader.Close(); 
       } 
} 
catch (Exception ex) 
{ 
       throw ex; 
} 

1 ответ

По иронии судьбы во время тестирования с неверным URL https://ww.google.com ты случайно споткнулся о мину. Смотрите этот пост для деталей. Документация MSDN, упомянутая в этом посте, находится здесь. Обратите внимание, что WebRequest.Create возвращает HttpWebRequest,

По сути, это займет некоторое время, поскольку URL-адрес не сопоставлен с IP-адресом и, следовательно, не будет кэшироваться в цепочке, что требует полного поиска DNS каждый раз, когда вы обращаетесь к нему. На самом деле с этим ничего не поделаешь, если вы не используете свой собственный уровень кэширования DNS в клиенте, но, честно говоря, это больше проблем, чем стоит.

Другие вопросы по тегам