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.
sumber
Jawaban:
Masalah
Anda menggunakan SimpleWorkerRequest dalam skenario yang tidak dirancang untuk itu. Anda menggunakannya di dalam IIS . Jika Anda melihat tautan MSDN sebelumnya (penekanan adalah milik saya):
Juga, jika Anda melihat dokumentasi MSDN untuk System.Web.Hosting namespace (
SimpleWorkerRequest
ada di namespace ini), Anda juga akan melihat sesuatu yang mirip dengan di atas (sekali lagi, penekanan ada pada saya):Solusinya
Saya akan merekomendasikan untuk menghapus panggilan
SimpleWorkerRequest
. Sebagai gantinya, Anda dapat menggunakan solusi Microsoft untuk memastikan situs web Anda secara otomatis memulai setelah didaur ulang. Yang Anda butuhkan adalah Modul Inisialisasi Aplikasi Microsoft untuk IIS 7.5 . Tidak rumit untuk dikonfigurasi, tetapi Anda perlu memahami opsi yang tepat. Inilah sebabnya saya juga merekomendasikan UI Inisialisasi Aplikasi untuk IIS 7.5 . UI ditulis oleh blogger MSDN.Jadi apa sebenarnya yang dilakukan oleh solusi Microsoft? Itu melakukan apa yang Anda coba lakukan - IIS mengirim permintaan "dapatkan" ke situs web Anda setelah kumpulan aplikasi dimulai.
sumber
Cobalah mendaftar ulang ASP.NET dengan
aspnet_regiis -i
. Ini berhasil untuk saya.Kemungkinan jalur untuk .NET 4 (dari command prompt tinggi):
http://forums.iis.net/p/1190643/2026401.aspx
sumber
Jika Anda mengalami kesalahan ini dengan Windows 8 / Windows Server 2012 dan .Net 4.5 ikuti instruksi ini di sini: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html
Pergi ke "menghidupkan atau mematikan fitur Windows" Kemudian Layanan Informasi Internet Lalu World Wide Web Services Kemudian Fitur Pengembangan Aplikasi Dan kemudian aktifkan ASP.NET 4.5
Ini bekerja untuk saya (meskipun wizard dan kata-katanya sedikit berbeda di Windows Server 2012, tetapi Anda akan mengetahuinya). Dengan ini dikatakan, mengapa ini diperlukan setelah menginstal semuanya melalui Pemasang Platform Web termasuk semua dependensi benar-benar di luar saya ...
sumber
Meskipun mengikuti sebagian besar saran pada halaman ini, saya masih mendapatkan masalah pada Windows Server 2012. Instalasi .NET Extensibility 4.5 menyelesaikannya untuk saya:
Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5
sumber
Untuk Windows 10 / Windows Server 2016 gunakan perintah berikut:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
Jawaban yang disarankan dengan
aspnet_regiis
tidak berfungsi pada Windows 10 (Pembaruan Pembuat dan yang lebih baru) atau Windows Server 2016:Menariknya, dialog "Aktifkan / Nonaktifkan Fitur Windows" tidak memungkinkan saya untuk menghapus .NET atau ASP.NET 4.6, dan hanya perintah DISM di atas yang berfungsi. Tidak yakin apakah nama fiturnya benar, tetapi itu berhasil untuk saya.
sumber
Jalankan salah satu dari perintah ini:
Untuk OS Windows 32 Bit:
Untuk OS Windows 64 Bit:
sumber
Https://stackoverflow.com/a/13266763/1277458 ini berfungsi dengan baik. Tetapi jika Anda memiliki sistem operasi 64-bit, gunakan Framework64 alih-alih Framework di jalur:
sumber
Dalam kasus saya (Windows 10 + IIS 10) saya harus membuka " Aktifkan atau Nonaktifkan Fitur Windows " dan kemudian pergi ke Layanan Informasi Internet> World Wide Web Services> Fitur Pengembangan Aplikasi> dan periksa ASP.NET 4.6
sumber
Membuat ini posnya sendiri karena ini membuat saya pergi selama berjam-jam.
Saya melihat mungkin selusin posting serupa di sini dan di tempat lain tentang masalah ini dan perbaikan aspnet_regiis. Mereka tidak bekerja untuk saya, dan aspnet_regi bertingkah aneh, hanya mendaftar opsi dll.
Seperti yang ditunjukkan oleh pengguna ryan-anderson di atas, Anda tidak dapat memasukkan .exe
Bagi mereka yang kurang nyaman dengan hal-hal di luar IIS di server, inilah yang Anda lakukan dalam langkah-langkah sederhana.
Temukan aspnet_regi dalam folder yang mirip dengan jalur ini. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
Klik kanan command prompt di menu mulai atau di mana saja dan katakan untuk dijalankan sebagai administrator. Menggunakan fitur "Run" windows tidak akan berfungsi, atau tidak untuk saya.
Kembali ke aspnet_regi yang dapat dieksekusi. Klik-tarik langsung ke prompt perintah atau salin-tempel alamat ke prompt perintah.
Hapus, jika ada di sana, .exe di akhir. Ini kuncinya. Tambahkan -i (spasi minus mata) di akhir. Memasukkan.
Jika Anda melakukan ini dengan benar, Anda akan melihat bahwa itu mulai menginstal asp.net, dan kemudian memberitahu Anda itu berhasil.
sumber
Pastikan Anda telah mengatur
application-site
versi Anda dariv2.0
padav4.0
di IIS Manager :Setelah itu, instal
ASP.NET
.Untuk OS 32-Bit (Windows):
Untuk OS 64-Bit (Windows):
Mulai ulang Anda
application-site
di IIS Manager dan nikmatilah.sumber
Saya tahu ini adalah oldie, tetapi saya pikir saya mungkin menambahkan beberapa nilai. Bagi kita yang menjalankan Server Core di luar domain (anggota domain dapat menjalankan Server Manager dari jarak jauh untuk menambah / menghapus fitur / peran), Anda harus beralih ke baris perintah.
Pengguna Powershell dapat mengetik "Instal-WindowsFeature Web-Asp-Net45"
Itu harus setara dengan menggunakan manajer server.
sumber
Saya ditantang oleh pesan kesalahan yang sama, dengan .net 4.7 diinstal.
Solusinya adalah dengan mengikuti satu posting yang disebutkan sebelumnya untuk pergi dengan "Aktifkan atau nonaktifkan fitur Windows", di mana ".NET Framework 4.7 Advanced Services" -> "ASP.NET 4.7" sudah diperiksa.
Lebih jauh ke bawah daftar, ada "Layanan Informasi Internet" dan subnote "Fitur Pengembangan Aplikasi" -> "ASP.NET 4.7", yang juga perlu diperiksa.
Saat mengaktifkan ini, banyak fitur lain yang diaktifkan ... Saya cukup menekan tombol Ok, dan masalah terselesaikan. Screendump dari dialog fitur windows
sumber
Saya sedang mengerjakan Windows Server 2012. Fitur .NET Extensibility 4.5 aktif. WebDAVModule dihapus. Saya masih mendapatkan 500,21 kesalahan pada rute ASP.NET '/ docs'.
Mengubah 'skipManagedModules' ke false memperbaiki masalah.
Terima kasih kepada https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI
sumber
Saya memecahkan masalah ini, menambahkan "Hidupkan atau matikan fitur Windows" Opsi ASP.NET 4.7
sumber
Saya punya masalah ini dan menemukan bahwa menghapus folder berikut ini membantu, bahkan dengan edisi non-Express. Express:
C:\Users\<user>\Documents\IISExpress
sumber
Kesalahan ini mulai terjadi pada saya entah dari mana minggu lalu, mempengaruhi situs web yang ada di mesin saya. Saya tidak beruntung dengan itu mencoba salah satu saran di sini. Akhirnya saya menghapus WebDAV dari IIS sepenuhnya (Fitur Windows -> Layanan Informasi Internet -> Layanan World Wide Web -> Fitur HTTP Umum -> Penerbitan WebDAV). Saya melakukan reset IIS setelah ini untuk ukuran yang baik, dan kesalahan saya akhirnya diselesaikan.
Saya hanya bisa menebak bahwa pembaruan Windows memulai masalah, tetapi saya tidak yakin.
sumber
Anda bisa memperbaikinya dengan mengubah tipe "ExtensionlessUrlHandler-Integrated-4.0" di iis ke System.Web.DefaultHttpHandler
sumber
Bagi saya, menghapus WebDAV dari server saya menyebabkan aplikasi mengembalikan
503 Service Unavailable
pesan kesalahan saat menggunakanPUT
atauDELETE
, jadi saya menginstalnya kembali. Saya juga mencoba sepenuhnya menghapus .NET Framework 4.5 dan menginstalnya kembali dan juga mencoba mendaftar ulang seperti yang disarankan tetapi tidak berhasil.Saya dapat memperbaikinya dengan menonaktifkan WebDAV untuk kumpulan aplikasi individual , ini menghentikan kesalahan 'modul buruk' saat menggunakan
PUT
atauDELETE
.Nonaktifkan WebDAV untuk Kumpulan Aplikasi Individual:
WebDAV Authoring Tools
dalam daftarDisable WebDAV
di kanan atas.Ta daaaa!
Saya masih meninggalkan item hapus di
web.config
file saya .Tautan ini adalah tempat saya menemukan instruksi tetapi tidak terlalu jelas.
sumber
Ini mungkin bukan solusi yang berguna untuk OP tetapi menyangkut pesan "kesalahan" yang sama.
Kami meng-hosting halaman PHP di IIS8.5 dengan .NET 4.5 diinstal dengan benar.
Kami menggunakan fungsionalitas preload untuk memastikan aplikasi kami selalu responsif di seluruh papan.
Setelah beberapa saat, kami mulai mendapatkan kesalahan ini secara acak.
Di web.config: Saya meletakkan skipManagedModules menjadi true, -> jangan lakukan ini!
Meskipun situs web adalah php, perutean ke halaman dikelola oleh modul !!!
sumber
Saya juga mengalami masalah itu. Aplikasi MVC4 saya berjalan pada Windows Server 2012 R2 dengan IIS 8.5. Tidak ada solusi yang diposting untuk saya ... menginstal kerangka kerja yang hilang melalui Fitur IIS bisa menyelesaikannya tetapi instalasi selalu gagal.
Saya harus menggunakan
Web Platform Installer
dan menginstal paket-paket berikut:sumber
Saya menghadapi masalah ini dalam aplikasi web yang dihosting di server hosting bersama. Jadi jelas tidak memiliki akses langsung ke IIS, jadi tidak bisa menerapkan banyak solusi yang diusulkan di sini.
Pada panel kontrol penyedia hosting saya mengaktifkan logging kesalahan untuk IIS dan ASP.Net. Dan kemudian mengetahui bahwa kesalahan sebenarnya terletak pada cshtml yang hilang.
sumber
Instalasi .NET 4.7 bekerja untuk saya. Saya hanya menginstal 3,5 sebelumnya.
sumber