Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 16308|Jawab: 0

[ASP.NET] [Mitos] Apakah metode Init objek HttpApplication hanya akan dieksekusi sekali?

[Salin tautan]
Diposting pada 06/02/2017 17.29.28 | | | |
Saya menemukan bahwa banyak teman, seperti saya, salah menggunakan IHttpModule.Init sebagai alternatif Application_Start untuk melakukan beberapa operasi inisialisasi aplikasi di dalamnya.
Namun, sifat peristiwa Application_Start di IHttpModule.Init dan Global.asax berbeda, dan IHttpModule.Init tidak dapat digunakan secara langsung untuk menggantikan Application_Start ASP.NET proses inisialisasi aplikasi. Juga tidak dapat digunakan secara sederhana untuk menyimpulkan bahwa metode Init berulang kali dipanggil untuk menyimpulkan bahwa program ASP.NET telah dimulai ulang.
Alasannya adalah bahwa IHttpModule.Init dapat dipanggil beberapa kali saat menanggapi permintaan ASP.NET, dan itu sangat mungkin terjadi selama operasi situs web yang sebenarnya.
Mengapa IHttpModule.Init dipanggil beberapa kali karena setiap instans HttpApplication hanya dapat menangani satu permintaan pada satu waktu, dan ASP.NET mendukung sejumlah permintaan bersamaan, sehingga instans HttpApplication akan dibuat beberapa kali untuk merespons permintaan yang berbeda ketika tidak cukup untuk menanggapi permintaan bersamaan. Setiap instans HttpApplication membuat kumpulan HttpModules baru dan memanggil metode Init setelah dibuat.
Application_Start hanya akan dipanggil setelah objek HttpApplication pertama dibuat, dan instans HttpApplication berikutnya tidak akan memicu peristiwa ini.
Saya pikir penggunaan kembali instance HttpApplication adalah alasan utama kesalahpahaman penggunaan metode Init IHttpModule, karena kita biasanya hanya memiliki satu permintaan saat men-debug program, dan pada dasarnya tidak mungkin untuk berulang kali mengeksekusi metode Init HttpModule. Di lingkungan yang berjalan situs web yang sebenarnya, permintaan bersamaan adalah hal yang umum, dan jika metode Init disalahgunakan, hal itu dapat menyebabkan masalah aneh di lingkungan yang sebenarnya.
Untuk detail spesifik, silakan merujuk ke "Ikhtisar Siklus Hidup Aplikasi ASP.NET untuk IIS 5.0 dan 6.0" MSDN, yang menyediakan gambar dalam artikel:
Anda juga dapat menggunakan Refelector untuk mendekompilasi rakitan System.Web dan menganalisis hubungan panggilan metode IHttpModule.Init.
Anda akan berakhir dengan metode System.Web.HttpApplicationFactory.GetNormalApplicationInstance, yang menunjukkan bagaimana instans HttpApplication digunakan kembali dan dibuat.
Singkatnya, IHttpModule.Init tidak bisa begitu saja digunakan sebagai pengganti Application_Start.
Cara yang relatif sederhana adalah dengan menggunakan bidang tipe bool statis sebagai tag inisialisasi, dan mengatur tanda ke true setelah inisialisasi yang diperlukan oleh program di HttpModule, dan jangan mengulangi inisialisasi lain kali.
Namun, kode seperti mendaftarkan peristiwa BeginRequest masih perlu dieksekusi setiap kali Init dieksekusi, karena instance HttpModule saat ini berbeda, jika Anda menilai bidang markup inisialisasi statis tanpa mengulangi peristiwa pendaftaran, itu akan menyebabkan masalah aneh seperti penulisan ulang URL yang terkadang dijalankan dan terkadang tidak dieksekusi.

[Mitos] Apakah metode Init objek HttpApplication hanya akan dieksekusi sekali?

Jawaban: Ini akan dieksekusi beberapa kali!!!!





Mantan:Gunakan InternalsVisibleTo untuk menambahkan "rakitan teman" ke rakitan
Depan:Kontes regex Java untuk memilih nomor yang indah
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com