using (WebResponse response = request.GetResponse())
{
    response.GetResponseStream().CopyTo(destination);
}

Halten Sie jede alte HttpWebRequest-Antwort in einem Bereich, der sie vollständig verbraucht und freigibt. Dabei ist destination der schreibbare Ausgabestrom der Anwendung; der using-Block gibt die WebResponse frei, selbst wenn das Kopieren fehlschlägt, ohne Eigentum an dieser Ausgabe zu übernehmen.

Dass eine Proxyanfrage gelingt und spätere warten, kann auf unvollendete Antworten hindeuten, die Verbindungsressourcen belegen. Der bloße Empfang einer WebResponse beendet ihren Body nicht. Das Anforderungs-Timeout begrenzt eine Wartezeit, nicht die Lebensdauer jeder bereits erhaltenen Antwort.

Wenden Sie dasselbe Eigentum auf Fehler an. Eine WebException kann eine Antwort tragen, die Ihr Code untersucht; schließen Sie sie nach der Untersuchung. Ein Transportfehler kann überhaupt keine Antwort haben.

Freigabe gibt die Ressourcen der Antwort zurück, verspricht aber nicht in jedem Fall wiederverwendbare Verbindungen. Protokoll, Server und Body-Verbrauch bleiben wichtig.

Dies betrifft die Wartung des alten WebRequest-Stapels. Folgen Sie in neuerem Code dem Antwort-/Strom-Eigentum des tatsächlichen Clients; für HttpClient halten Sie Antworten in ihrem Freigabebereich und unterscheiden Sie diesen Aufräumfehler von Proxyauthentifizierung oder Routenwahl.

Ähnliche Artikel