Frage

Ich erhalte die Antwort von einem HttpWebRequest (mit einer modifizierten Version Jeff Richters CCR-Wrapper ), dann einige der Überschriften, um die Inspektion, ob oder nicht zu entscheiden, den Download fortzusetzen. Manchmal kann ich nicht fortsetzen wollen, so dass ich damit response.Close und request.Abort . Ist es notwendig, GetResponseStream dann zur Ausgabe an schließen, den Strom, oder ist dies implizit, wenn man Anrufe Antwort .Close ?

Nach GetResponse Ausgabe des docs Zustand :

  

Sie müssen die Close-Methode aufrufen, um den Strom und lassen Sie die Verbindung zu schließen. Geschieht dies nicht, Ihre Anwendung verursachen kann von Verbindungen auslaufen zu lassen.

So bedeutet dies, dass, sobald wir eine Antwort haben, dann ist es obligatorisch, um den Strom zu bekommen und in der Nähe das?

Wir sehen einige ziemlich seltsame Fragen, bei denen gehangen Downloads schließlich sind das System überschwemmen. Dies scheint der stärkste Kandidat für eine Ressource-Leck, aber frage mich, ob jemand hat Erfahrung mit diesem Thema.

Als Nebenwirkung: ist es GetResponseStream zweimal in der Annahme sicher, dass es der gleiche Strom ist

War es hilfreich?

Lösung

Eigentlich ein Aufruf an webResponse.Close () schließt die Antwort-Stream.

Die Antwort IDisposable ist, ich Ihnen eine Anweisung using beraten.

Andere Tipps

Beim HttpWebResponse.Close implicity schließt den Antwortstream.

Aus der Dokumentation:

  

Die Close-Methode schließt den Antwortstream und gibt die Verbindung zu der Ressource für die Wiederverwendung durch andere Anforderungen

     

Sie müssen entweder rufen Sie die Stream.Close oder die HttpWebResponse.Close Methode, den Strom zu schließen und lassen Sie die Verbindung zur Wiederverwendung. Es ist nicht notwendig, sowohl Stream.Close anrufen und HttpWebResponse.Close, aber so nicht tun, nicht einen Fehler verursachen. Wird der Strom schließen Ihre Anwendung kann dazu führen, Verbindungen zu laufen.

Und für Ihre Doppel GetResponseStream Frage, obwohl die Dokumentation nicht explizit nicht erwähnt, es wird das gleiche Strom-Objekt egal immer wieder zurückkehren, wie oft Sie es nennen.

etwas tun, wie WCF-Verbindungen

//Done with the service, let's close it.
try
{
   if (client.State != System.ServiceModel.CommunicationState.Faulted)
   {
      client.Close();
   }
}
catch (Exception ex)
{
   client.Abort();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top