Streamreader не работает, когда я закрываю HttpWebResponse рано - PullRequest
1 голос
/ 01 декабря 2010
Uri targetUri = new Uri(targetURL);    
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string data = reader.ReadToEnd();
response.Close();

Почему вышеуказанный код работает нормально, а следующий - нет?Обратите внимание, что я рано закрываю ответ в следующем коде.

Uri targetUri = new Uri(targetURL);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
response.Close();
string data = reader.ReadToEnd();

Ответы [ 2 ]

6 голосов
/ 01 декабря 2010

Закрытие ответа также закрывает поток ответов ... так что StreamReader больше не из чего читать.

Из документации на WebResponse.Close:

Метод Close очищает ресурсы, используемые WebResponse и закрывает основной поток вызов метода Stream.Close.

0 голосов
/ 01 декабря 2010

Ваш читатель был инициализирован потоком из ответа, поэтому он его использует.

Если вы закроете поток ответов, у считывателя больше не будет рабочего базового потока для чтения.

...