Απελευθερώστε τις αποκρίσεις HttpWebRequest μεταξύ των αιτημάτων διαμεσολάβησης
Δώστε στις παλαιές αποκρίσεις HttpWebRequest σαφή διάρκεια ζωής ώστε τα επαναλαμβανόμενα αιτήματα διαμεσολάβησης να μην κρατούν επ' αόριστον πόρους σύνδεσης.
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
Κρατήστε κάθε παλαιά απόκριση HttpWebRequest σε ένα πεδίο που ολοκληρώνει την κατανάλωσή της και την απελευθερώνει. Εδώ το destination είναι η εγγράψιμη ροή εξόδου της εφαρμογής· το μπλοκ using απελευθερώνει το WebResponse ακόμη και αν η αντιγραφή αποτύχει, χωρίς να αναλαμβάνει την κυριότητα αυτής της εξόδου.
Η επιτυχία ενός αιτήματος διαμεσολάβησης και η αναμονή των επόμενων μπορεί να υποδηλώνει ημιτελείς αποκρίσεις που καταλαμβάνουν πόρους σύνδεσης. Η απλή λήψη του WebResponse δεν ολοκληρώνει το σώμα του. Το χρονικό όριο του αιτήματος περιορίζει μια αναμονή, όχι τη διάρκεια ζωής κάθε απόκρισης που έχει ήδη ληφθεί.
Εφαρμόστε την ίδια κυριότητα στα σφάλματα. Ένα WebException μπορεί να φέρει απόκριση που εξετάζει ο κώδικάς σας· κλείστε την μετά την εξέταση. Μια αποτυχία μεταφοράς μπορεί να μην έχει καθόλου απόκριση.
Η απελευθέρωση επιστρέφει τους πόρους της απόκρισης αλλά δεν υπόσχεται επαναχρησιμοποιήσιμες συνδέσεις σε κάθε περίπτωση. Το πρωτόκολλο, ο διακομιστής και η κατανάλωση του σώματος εξακολουθούν να μετράνε.
Αυτό αφορά τη συντήρηση της παλαιάς στοίβας WebRequest. Σε νεότερο κώδικα ακολουθήστε την κυριότητα απόκρισης/ροής του πραγματικού πελάτη· για το HttpClient, κρατήστε τις αποκρίσεις εντός του πεδίου απελευθέρωσής τους, και διακρίνετε αυτή την αποτυχία καθαρισμού από τον έλεγχο ταυτότητας διαμεσολάβησης ή την επιλογή διαδρομής.