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

हर पुरानी HttpWebRequest प्रतिक्रिया को ऐसे दायरे में रखें जो उसका उपभोग पूरा करके उसे मुक्त कर दे। यहाँ destination एप्लिकेशन की लिखने योग्य आउटपुट स्ट्रीम है; कॉपी विफल होने पर भी using ब्लॉक WebResponse को मुक्त कर देता है, उस आउटपुट का स्वामित्व लिए बिना।

एक प्रॉक्सी अनुरोध का सफल होना और बाद वालों का प्रतीक्षा करना अधूरी प्रतिक्रियाओं के कनेक्शन संसाधनों पर कब्ज़ा होने का संकेत हो सकता है। केवल WebResponse प्राप्त करना उसका बॉडी पूरा नहीं करता। अनुरोध की समय-सीमा प्रतीक्षा को सीमित करती है, पहले से प्राप्त हर प्रतिक्रिया के जीवनकाल को नहीं।

त्रुटियों पर भी वही स्वामित्व लागू करें। एक WebException ऐसी प्रतिक्रिया ले जा सकता है जिसे आपका कोड जाँचता है; जाँच के बाद उसे बंद करें। परिवहन विफलता में कोई प्रतिक्रिया ही न हो सकती है।

निपटान प्रतिक्रिया के संसाधन लौटाता है पर हर स्थिति में पुन: उपयोग योग्य कनेक्शन का वादा नहीं करता। प्रोटोकॉल, सर्वर और बॉडी का उपभोग अब भी मायने रखते हैं।

यह पुराने WebRequest स्टैक के रखरखाव से संबंधित है। नए कोड में वास्तविक क्लाइंट के प्रतिक्रिया/स्ट्रीम स्वामित्व का पालन करें; HttpClient के लिए, प्रतिक्रियाओं को उनके निपटान दायरे में रखें, और इस सफ़ाई विफलता को प्रॉक्सी प्रमाणीकरण या मार्ग चयन से अलग पहचानें।

संबंधित लेख