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

Mantenete ogni risposta legacy di HttpWebRequest in un ambito che ne completi il consumo e la rilasci. Qui destination è il flusso di output scrivibile dell'applicazione; il blocco using rilascia la WebResponse anche se la copia fallisce, senza assumere la proprietà di quell'output.

Il successo di una richiesta proxy e l'attesa delle successive può indicare risposte non completate che occupano risorse di connessione. Ricevere la WebResponse non ne termina il corpo. Il timeout della richiesta limita un'attesa, non la durata di ogni risposta già ottenuta.

Applicate la stessa proprietà agli errori. Una WebException può trasportare una risposta che il codice esamina; chiudetela dopo l'esame. Un guasto di trasporto può non avere alcuna risposta.

Il rilascio restituisce le risorse della risposta ma non promette connessioni riutilizzabili in ogni caso. Protocollo, server e consumo del corpo contano ancora.

Riguarda la manutenzione dello stack WebRequest legacy. Nel codice più recente seguite la proprietà risposta/flusso del client effettivo; per HttpClient, mantenete le risposte nel loro ambito di rilascio, e distinguete questo guasto di pulizia dall'autenticazione proxy o dalla selezione del percorso.

Articoli correlati