ข้อยกเว้นการดำเนินการหมดเวลาในวิธี httpWebRequest.GetResponse() ปิดการเชื่อมต่อหรือไม่

คำถามของฉันอาจจะไร้สาระ แต่ต้องการคำตอบ เท่าที่ฉันรู้เมื่อใดก็ตามที่มีข้อยกเว้น "การดำเนินการหมดเวลา" เกิดขึ้นในวิธี HttpWebRequest.GetResponse() กว่าการเชื่อมต่อจะถูกปิดและปล่อย ถ้าไม่จริงจะทำยังไง? ฉันพยายาม google นี้แต่ไม่สามารถได้รับคำตอบ

แก้ไข: ในกรณีนี้ เป็นคำขอโพสต์ มีการสร้างการเชื่อมต่อและ URL ที่เรียกใช้กำลังประมวลผลคำขอที่ฝั่งเซิร์ฟเวอร์ แต่วัตถุ HttpWebRequest กำลังรอการตอบสนองและหลังจากเกิดข้อยกเว้นในบางครั้ง


person Nps    schedule 27.06.2015    source แหล่งที่มา


คำตอบ (2)


ความเข้าใจของฉันคือคุณต้องเรียกใช้เมธอด Close เพื่อปิดสตรีมและปล่อยการเชื่อมต่อ หากไม่ดำเนินการดังกล่าวอาจทำให้แอปพลิเคชันของคุณขาดการเชื่อมต่อ หากคุณไม่แน่ใจ คุณสามารถใส่บล็อก try/catch ไว้รอบเมธอด Close หรือ HttpWebRequest.GetResponse() ได้ตลอดเวลา

person SteveFerg    schedule 27.06.2015
comment
วิธีปิดที่เรากำลังพูดถึงอยู่ที่นี่? HttpWebRequest ไม่มีวิธีการปิดและ HttpWebResponse ยังไม่ได้เริ่มต้นที่นี่ - person Nps; 28.06.2015

ฉันไม่แน่ใจทั้งหมด แต่ดูเหมือนว่าข้อยกเว้น Operation TimedOut อาจเป็นข้อผิดพลาดของช่องทางการเชื่อมต่อพื้นฐาน ทำให้คำขอทั้งหมดหลังจากนั้นจบลงด้วยข้อยกเว้นเดียวกัน

ตามเอกสาร MSDN

คุณต้องเรียกวิธีการปิดเพื่อปิดกระแสข้อมูลและปล่อยการเชื่อมต่อ หากไม่ดำเนินการดังกล่าวอาจทำให้แอปพลิเคชันของคุณขาดการเชื่อมต่อ

ฉันได้ทดลองใช้งานเล็กๆ น้อยๆ เพื่อดู

    private static void MakeRequest()
    {
        WebRequest req = null;
        try
        {
            req = WebRequest.Create("http://www.wg.net.pl");
            req.Timeout = 10;                
            req.GetResponse();
        }
        catch (Exception ex)
        {

            Console.WriteLine(ex.Message);
            req.Timeout = 10000;
            req.GetResponse(); // This as well results in TimeOut exception
        }
    }
person Rahul    schedule 27.06.2015
comment
วิธีปิดที่เรากำลังพูดถึงอยู่ที่นี่? HttpWebRequest ไม่มีวิธีการปิดและ HttpWebResponse ยังไม่ได้เริ่มต้นที่นี่ - person Nps; 28.06.2015
comment
แต่ข้อยกเว้นเกิดขึ้นในวิธี GetResponse() ซึ่งส่งคืนวัตถุ HttpWebResponse ซึ่งไม่ได้ส่งคืนเนื่องจากข้อยกเว้น ฉันไม่สามารถเรียกใช้เมธอด Close บนวัตถุ null ได้ - person Nps; 28.06.2015
comment
@Nps ถูกต้องและการเรียก close() เป็นแนวปฏิบัติที่ดีที่สุดมากกว่า ในกรณีนี้ ฉันไม่เข้าใจว่าทำไมถึงต้องเรียก close() เนื่องจากน่าจะปิดไปแล้ว - person Rahul; 28.06.2015
comment
นั่นคือคำถามของฉัน ดังนั้นข้อยกเว้นจะปิดการเชื่อมต่อโดยอัตโนมัติ เราไม่จำเป็นต้องจัดการในสถานการณ์นี้โดยเฉพาะ - person Nps; 28.06.2015
comment
ใช่ อย่างน้อยสำหรับฉัน ดูเหมือนว่าเนื่องจากไม่มีการเชื่อมต่อเกิดขึ้นในความเป็นจริง - person Rahul; 28.06.2015
comment
ขออภัย ฉันจะต้องไปแล้ว และฉันไม่สามารถช่วยได้มากไปกว่าสิ่งที่ฉันมีอยู่แล้ว - person Rahul; 28.06.2015
comment
เพิ่มรายละเอียดเพิ่มเติมที่เป็นปัญหา - person Nps; 28.06.2015