Вызваляць адказы HttpWebRequest паміж проксі-запытамі
Дайце старым адказам HttpWebRequest ясны час жыцця, каб паўторныя проксі-запыты не ўтрымлівалі рэсурсы злучэння бясконца.
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
Трымайце кожны стары адказ HttpWebRequest у вобласці, якая цалкам спажывае і вызваляе яго. Тут destination — гэта запісвальны паток вываду праграмы; блок using вызваляе WebResponse, нават калі капіраванне не ўдалося, не пераймаючы валоданне гэтым вывадам.
Поспех аднаго проксі-запыту і чаканне наступных могуць сведчыць пра незавершаныя адказы, якія займаюць рэсурсы злучэння. Атрыманне WebResponse само па сабе не завяршае яго цела. Тайм-аўт запыту абмяжоўвае чаканне, а не час жыцця кожнага ўжо атрыманага адказу.
Ужывайце тое ж валоданне да памылак. WebException можа несці адказ, які ваш код даследуе; закрыйце яго пасля праверкі. Збой транспарту можа ўвогуле не мець адказу.
Вызваленне здымае рэсурсы адказу, але не гарантуе паўторна выкарыстоўваныя злучэнні ў кожным выпадку. Пратакол, сервер і спажыванне цела па-ранейшаму маюць значэнне.
Гэта датычыцца абслугоўвання старога стэка WebRequest. У новым кодзе прытрымлівайцеся валодання адказам/патокам фактычнага кліента; для HttpClient трымайце адказы ў іх вобласці вызвалення і адрознівайце гэты збой ачысткі ад аўтэнтыфікацыі проксі ці выбару маршруту.