Apakah pengecualian Waktu Operasi habis dalam metode httpWebRequest.GetResponse() menutup koneksi

Pertanyaan saya mungkin konyol, tapi butuh jawaban. Sejauh yang saya tahu setiap kali pengecualian "Operasi telah habis" terjadi dalam metode HttpWebRequest.GetResponse() maka koneksi ditutup dan dilepaskan. Jika tidak benar bagaimana cara kerjanya? Saya mencoba mencari di Google tetapi tidak mendapatkan jawabannya.

EDIT: Dalam hal ini adalah permintaan posting, koneksi dibuat dan URL yang dipanggil memproses permintaan di ujung server, tetapi Objek HttpWebRequest menunggu respons dan setelah beberapa saat terjadi pengecualian.


person Nps    schedule 27.06.2015    source sumber


Jawaban (2)


Pemahaman saya adalah Anda harus memanggil metode Tutup untuk menutup aliran dan melepaskan koneksi. Kegagalan untuk melakukannya dapat menyebabkan aplikasi Anda kehabisan koneksi. Jika Anda tidak yakin, Anda selalu dapat menempatkan blok coba/tangkap di sekitar metode Close atau HttpWebRequest.GetResponse().

person SteveFerg    schedule 27.06.2015
comment
Metode Tutup mana yang sedang kita bicarakan di sini? HttpWebRequest tidak memiliki metode Close dan HttpWebResponse belum diinisialisasi di sini. - person Nps; 28.06.2015

Saya tidak sepenuhnya yakin tetapi sepertinya pengecualian Operation TimedOut mungkin menyebabkan kesalahan pada saluran koneksi yang mendasarinya; menyebabkan semua permintaan setelah itu berakhir dengan pengecualian yang sama.

Berdasarkan Dokumentasi MSDN

Anda harus memanggil metode Tutup untuk menutup aliran dan melepaskan koneksi. Kegagalan untuk melakukannya dapat menyebabkan aplikasi Anda kehabisan koneksi.

Saya melakukan uji coba kecil untuk melihatnya

    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
Metode Tutup mana yang sedang kita bicarakan di sini? HttpWebRequest tidak memiliki metode Close dan HttpWebResponse belum diinisialisasi di sini. - person Nps; 28.06.2015
comment
Namun pengecualian terjadi pada metode GetResponse() yang mengembalikan objek HttpWebResponse yang tidak dikembalikan karena pengecualian. Saya tidak bisa memanggil metode Tutup pada objek nol. - person Nps; 28.06.2015
comment
@Nps, itu benar dan memanggil close() lebih merupakan praktik terbaik. Dalam kasus khusus ini, saya tidak mengerti mengapa memanggil close() karena kemungkinan besar sudah ditutup. - person Rahul; 28.06.2015
comment
itulah pertanyaan saya tadi, jadi pengecualian akan secara otomatis menutup koneksi. Kita tidak perlu menangani situasi khusus ini. - person Nps; 28.06.2015
comment
Ya, setidaknya bagi saya sepertinya tidak ada koneksi yang dibangun dalam kenyataan. - person Rahul; 28.06.2015
comment
Maaf, saya harus pergi sekarang dan saya tidak akan dapat membantu lebih jauh dari apa yang telah saya lakukan. - person Rahul; 28.06.2015
comment
Menambahkan lebih banyak detail dalam pertanyaan - person Nps; 28.06.2015