Libere as respostas de HttpWebRequest entre solicitações de proxy
Dê às respostas herdadas de HttpWebRequest um tempo de vida claro para que solicitações de proxy repetidas não retenham recursos de conexão indefinidamente.
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
Mantenha cada resposta herdada de HttpWebRequest em um escopo que conclua seu consumo e a libere. Aqui destination é o fluxo de saída gravável da aplicação; o bloco using libera o WebResponse mesmo se a cópia falhar, sem assumir a propriedade dessa saída.
Uma solicitação de proxy ter sucesso e as seguintes esperarem pode indicar respostas inacabadas ocupando recursos de conexão. Apenas receber o WebResponse não conclui seu corpo. O tempo limite da solicitação limita uma espera, não o tempo de vida de cada resposta já obtida.
Aplique a mesma propriedade aos erros. Uma WebException pode carregar uma resposta que seu código inspeciona; feche-a após a inspeção. Uma falha de transporte pode não ter resposta alguma.
A liberação devolve os recursos da resposta, mas não promete conexões reutilizáveis em todos os casos. Protocolo, servidor e consumo do corpo ainda importam.
Isso diz respeito à manutenção da pilha WebRequest herdada. Em código mais recente, siga a propriedade de resposta/fluxo do cliente real; para HttpClient, mantenha as respostas dentro do escopo de liberação, e distinga essa falha de limpeza da autenticação de proxy ou da seleção de rota.