2010-12-01 43 views
1
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(); 

Pourquoi le code ci-dessus fonctionne bien, mais ce n'est pas le cas? Remarque Je ferme la réponse au début du code suivant.Streamreader ne fonctionne pas lorsque je ferme HttpWebResponse début

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(); 

Répondre

6

La fermeture de la réponse ferme aussi le flux de réponse ... donc le StreamReader n'a plus rien à lire.

De la documentation WebResponse.Close:

La méthode Close nettoie les ressources utilisées par un WebResponse et ferme le flux sous-jacent par appelant la méthode Stream.Close.

0

Votre lecteur a été initialisé avec le flux de la réponse, donc il l'utilise.

Si vous fermez le flux de réponses, le lecteur n'a plus de flux sous-jacent de travail à lire.