Saya memiliki situs yang memegang kunci eksklusif pada beberapa sumber. Saya menggunakan .NET Application_Start dan Application_End peristiwa untuk mendapatkan dan melepaskan kunci pada sumber daya ini pada waktu yang tepat. Agar ini berfungsi dengan baik, hanya akan ada satu contoh aplikasi saya berjalan pada waktu tertentu.
Agar ini terjadi, saya telah menyetel Disable Overlapped Recycle
properti di Application pool True
. Properti ini seharusnya memastikan bahwa proses pekerja lama dimatikan sepenuhnya sebelum yang baru dimulai setiap kali kumpulan aplikasi didaur ulang. Ini berfungsi dengan baik setiap kali kumpulan aplikasi didaur ulang secara manual melalui IIS, secara otomatis sebagai hasil dari idle-timeout tercapai atau secara otomatis sesuai dengan aturan interval waktu / waktu tertentu.
Namun, ketika web.config untuk situs diperbarui, aturan ini tidak diterapkan - Proses pekerja baru dimulai sebelum yang lama selesai dimatikan. Ini menyebabkan hal-hal buruk terjadi. Saya memiliki Disable Recycling for Configuration Changes
properti yang disetel False
karena saya ingin kumpulan aplikasi didaur ulang ketika web.config diperbarui - ini sering terjadi selama pengembangan.
Apakah ini sesuatu yang diharapkan, atau itu bug di IIS? APAKAH satu-satunya pilihan saya untuk mengatur agar mengubah web.config tidak mendaur ulang kumpulan aplikasi? Saya lebih suka tidak melakukan ini, karena saya cukup yakin itu akan menyebabkan banyak sakit kepala dengan orang-orang mengubah konfigurasi dan kemudian lupa untuk mendaur ulang kumpulan aplikasi.
Memperbarui:
Untuk lebih jelasnya, ketika start
acara proses pekerja baru dipanggil sebelum proses pekerja lama selesai ditutup, maka end
acara proses pekerja lama tidak pernah dipanggil - Ini tidak terjadi secara berurutan, tidak pernah terjadi sama sekali.