2015-06-27 6 views
3

Мой вопрос может быть глупым, но для этого нужен ответ. Насколько я знаю, когда «« Операция имеет время ожидания »« Исключение происходит в методе HttpWebRequest.GetResponse(), чем соединение закрыто и освобождено. Если это неверно, то как это работает? Я попытался это сделать, но не смог получить ответ.Выполняется ли исключение из тайм-аута в методе httpWebRequest.GetResponse() закрыть соединение

РЕДАКТИРОВАТЬ: В данном случае это был запрос на запись, была установлена ​​связь, и URL-адрес, который был называется обработка запроса на стороне сервера, но HttpWebRequest Объект ожидания на ответ, и после того, как-то произошло исключение.

ответ

1

Насколько я понимаю, вы должны вызвать метод Close, чтобы закрыть поток и освободить соединение. В противном случае ваше приложение может не работать. Если вы сомневаетесь, вы всегда можете поставить блок try/catch вокруг метода Close или HttpWebRequest.GetResponse().

+0

Какой метод Close здесь мы говорим? HttpWebRequest не имеет метода Close, а HttpWebResponse еще не инициализирован здесь. – Nps

0

Ну, я не совсем уверен, но похоже, что исключение Operation TimedOut, по-видимому, вызывает неисправности основного канала связи; потому что весь запрос после этого заканчивается тем же самым исключением.

Per MSDN Documentation

Вы должны вызвать метод Close, чтобы закрыть поток и освободить соединение. Невыполнение этого требования может привести к отключению вашего приложения от .

Я сделал небольшое исследование, чтобы увидеть

private static void MakeRequest() 
    { 
     WebRequest req = null; 
     try 
     { 
      req = WebRequest.Create("http://www.wg.net.pl"); 
      req.Timeout = 10;     
      req.GetResponse(); 
     } 
     catch (Exception ex) 
     { 

      Console.WriteLine(ex.Message); 
      req.Timeout = 10000; 
      req.GetResponse(); // This as well results in TimeOut exception 
     } 
    } 
+0

Какой метод Close мы говорим здесь? HttpWebRequest не имеет метода Close, а HttpWebResponse еще не инициализирован здесь. – Nps

+0

@Nps, проверьте документацию, связанную с ответом. В частности, вы должны вызывать 'Stream.Close()' или 'HttpWebResponse.Close()'. См. Здесь https://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.close%28v=vs.110%29.aspx. – Rahul

+0

Но исключение встречается в методе 'GetResponse()', который возвращает объект HttpWebResponse, который не является возвратом из-за исключения. Я не могу вызвать метод Close для нулевого объекта. – Nps