Освобождавайте отговорите на HttpWebRequest между прокси заявките
Дайте на старите отговори HttpWebRequest ясен жизнен цикъл, така че повторните прокси заявки да не задържат ресурси за връзка за неопределено време.
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
Дръжте всеки стар отговор HttpWebRequest в обхват, който довършва консумирането му и го освобождава. Тук destination е изходният поток за запис на приложението; блокът using освобождава WebResponse дори ако копирането се провали, без да поема собственост върху този изход.
Успехът на една прокси заявка и изчакването на следващите може да означава недовършени отговори, които заемат ресурси за връзка. Самото получаване на WebResponse не довършва тялото му. Изчакването на заявката ограничава чакането, а не живота на всеки вече получен отговор.
Приложете същата собственост и към грешките. WebException може да носи отговор, който кодът ви преглежда; затворете го след прегледа. Транспортна повреда може да няма никакъв отговор.
Освобождаването връща ресурсите на отговора, но не обещава връзки за повторно използване във всеки случай. Протоколът, сървърът и консумирането на тялото все още имат значение.
Това засяга поддръжката на стария стек WebRequest. В по-новия код следвайте собствеността на отговора/потока на действителния клиент; за HttpClient дръжте отговорите в обхвата им за освобождаване и разграничавайте тази повреда при почистването от удостоверяването на прокси или избора на маршрут.