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

هر پاسخ قدیمی HttpWebRequest را در محدوده‌ای نگه دارید که مصرف آن را تمام و آن را آزاد کند. در اینجا destination جریان خروجی نوشتنی برنامه است؛ بلوک using حتی اگر کپی ناموفق باشد WebResponse را آزاد می‌کند، بدون آنکه مالکیت آن خروجی را بر عهده بگیرد.

موفقیت یک درخواست پروکسی و انتظار درخواست‌های بعدی می‌تواند نشانه پاسخ‌های ناتمامی باشد که منابع اتصال را اشغال کرده‌اند. صرف دریافت WebResponse بدنه آن را تمام نمی‌کند. مهلت درخواست انتظار را محدود می‌کند، نه عمر هر پاسخی که پیش‌تر گرفته شده است.

همان مالکیت را بر خطاها اعمال کنید. یک WebException می‌تواند پاسخی را حمل کند که کد شما بررسی می‌کند؛ پس از بررسی آن را ببندید. یک شکست انتقال ممکن است هیچ پاسخی نداشته باشد.

آزادسازی منابع پاسخ را برمی‌گرداند اما در هر حال اتصال‌های قابل استفاده مجدد را تضمین نمی‌کند. پروتکل، سرور و مصرف بدنه هنوز مهم‌اند.

این به نگهداری پشته قدیمی WebRequest مربوط است. در کد جدیدتر از مالکیت پاسخ/جریان کلاینت واقعی پیروی کنید؛ برای HttpClient، پاسخ‌ها را در محدوده آزادسازی‌شان نگه دارید، و این شکست پاک‌سازی را از احراز هویت پروکسی یا انتخاب مسیر جدا کنید.

مقالات مرتبط