กำจัดการตอบกลับ HttpWebRequest ระหว่างคำขอพร็อกซี
ให้การตอบกลับ HttpWebRequest แบบเดิมมีอายุการใช้งานที่ชัดเจน เพื่อไม่ให้คำขอพร็อกซีที่ทำซ้ำถือทรัพยากรการเชื่อมต่อไว้อย่างไม่มีกำหนด
using (WebResponse response = request.GetResponse())
{
response.GetResponseStream().CopyTo(destination);
}
เก็บการตอบกลับ HttpWebRequest แบบเดิมแต่ละรายการไว้ในขอบเขตที่บริโภคจนจบและปล่อยมัน ที่นี่ destination คือสตรีมเอาต์พุตที่เขียนได้ของแอปพลิเคชัน บล็อก using จะปล่อย WebResponse แม้การคัดลอกจะล้มเหลว โดยไม่รับความเป็นเจ้าของเอาต์พุตนั้น
การที่คำขอพร็อกซีหนึ่งสำเร็จและคำขอถัดไปรออยู่ อาจบ่งชี้ว่ามีการตอบกลับที่ยังไม่จบถือทรัพยากรการเชื่อมต่ออยู่ การรับ WebResponse เท่านั้นไม่ทำให้เนื้อหาจบลง การหมดเวลาของคำขอจำกัดการรอ ไม่ใช่อายุของทุกการตอบกลับที่ได้รับแล้ว
ใช้ความเป็นเจ้าของเดียวกันกับข้อผิดพลาด WebException อาจพาการตอบกลับที่โค้ดของคุณตรวจสอบได้ ปิดมันหลังตรวจสอบ ความล้มเหลวในการขนส่งอาจไม่มีการตอบกลับเลย
การกำจัดคืนทรัพยากรของการตอบกลับ แต่ไม่ได้สัญญาว่าจะมีการเชื่อมต่อที่ใช้ซ้ำได้ในทุกกรณี โพรโทคอล เซิร์ฟเวอร์ และการบริโภคเนื้อหายังคงสำคัญ
เรื่องนี้เกี่ยวกับการบำรุงรักษาสแตก WebRequest แบบเดิม ในโค้ดใหม่กว่า ให้ทำตามความเป็นเจ้าของการตอบกลับ/สตรีมของไคลเอนต์จริง สำหรับ HttpClient เก็บการตอบกลับไว้ในขอบเขตการกำจัดของมัน และแยกความล้มเหลวในการล้างข้อมูลนี้ออกจากการพิสูจน์ตัวตนพร็อกซีหรือการเลือกเส้นทาง