Sejujurnya, saya telah mencoba untuk mengubah trik kotor pada IIS dan ketika saya berpikir bahwa saya akan berhasil, saya menyadari solusi saya tidak berhasil. Inilah yang saya coba lakukan:
1) Saya memiliki aplikasi ASP.NET yang memiliki kelas Preloader yang mewarisi IProcessHostPreloadClient dan melakukan semua inisialisasi berat dalam penerapan metode Preload (aplikasi ini kompleks dan merupakan bagian dari sistem yang sangat besar, sehingga membutuhkan sekitar 2 menit untuk membuat koneksi ke semua yang diperlukan layanan dan pre-instantiate beberapa pendaftaran Persatuan).
2) Saya punya banyak pekerjaan yang perlu dilakukan pada aplikasi shutdown (berhenti berlangganan, memutuskan sambungan, membuang, ...), dan saya kira tempat terbaik untuk melakukannya adalah dalam metode * Application_End * terletak di Global.asax .
3) Semuanya berfungsi dengan baik ketika saya memiliki aktivitas pengguna (permintaan pertama setelah Application Pool yang berisi aplikasi web tersebut dimulai akan menyebabkan * Application_Start * dipanggil dan setelah itu * Application_End * dipanggil pada Application Pool berhenti atau didaur ulang), tetapi masalah terjadi ketika tidak ada aktivitas pengguna dan aplikasi mencoba untuk me-restart sendiri setelah aktif selama 48 jam (persyaratan yang dikonfigurasi). Karena tidak ada permintaan, aplikasi secara resmi tidak memulai. Ergo, itu tidak bisa dihentikan dengan anggun karena * Application_End * tidak akan dipanggil.
4) Sekarang sampai pada bagian yang berantakan ... Saya sudah mencoba membuat permintaan GET dari kode di akhir metode Preload , dan itu berhasil. Tetapi solusi ini tampak buruk bagi saya, meskipun itu berhasil. Jadi, saya sudah mencoba banyak hal, dan hal terakhir yang saya coba adalah ini:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... dan itu telah melakukan tujuannya. * Application_Start * dipanggil, (Saya sudah memeriksa respons, itu berisi halaman login yang seharusnya ditampilkan dalam permintaan awal) dan pada aplikasi shutdown Application Pool diakhiri dengan anggun dengan melakukan pekerjaan yang diperlukan di * Application_End *.
TAPI
Setelah aplikasi dimulai (dimuat dan diinisiasi) dengan cara ini, inilah yang terjadi ketika saya ingin mencapai aplikasi melalui browser Web:
HTTP Error 500.21 - Handler Kesalahan Server Internal "ExtensionlessUrlHandler-Integrated-4.0" memiliki modul buruk "ManagedPipelineHandler" dalam daftar modulnya
Saya tidak dapat menemukan ini. Adakah yang bisa memberi tahu saya mengapa ini terjadi dan bagaimana cara memperbaikinya?
Jika saya tidak mengetahuinya, saya akan kembali ke solusi pertama (mengirim permintaan GET dari kode) tetapi masalah ini akan mengganggu saya karena saya bahkan tidak tahu apa yang salah.