Handler "ExtensionlessUrlHandler-Integrated-4.0" memiliki modul buruk "ManagedPipelineHandler" dalam daftar modulnya

252

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.

Ivan Peric
sumber
IIS versi apa yang Anda gunakan?
chue x
IIS 7.5 (7.5.7600.16385)
Ivan Peric
Bukan jawaban langsung untuk pertanyaan Anda, tetapi untuk pengguna lain dengan masalah yang sama dan dengan asumsi Anda memiliki aplikasi yang menghadapi internet: Anda bisa menggunakan layanan eksternal seperti uptimerobot.com untuk menyentuh aplikasi Anda setiap X jumlah waktu. Anda menjaga aplikasi Anda dalam keadaan berjalan + Anda memiliki manfaat tambahan dari layanan (waktu aktif, peringatan, dll).
qbantek
@ qbantek Meskipun aplikasi yang saya kerjakan tidak menghadap ke internet, Anda memberi saya ide bagus. Saya bisa menggunakan load balancer untuk melakukan sentuhan berkala dengan mengatur tipe pemeriksaan status kesehatan ke HTTP GET Sederhana. Terima kasih
Ivan Peric

Jawaban:

24

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):

Menyediakan implementasi sederhana dari kelas abstrak HttpWorkerRequest yang dapat digunakan untuk meng-host aplikasi ASP.NET di luar aplikasi Layanan Informasi Internet (IIS) . Anda dapat menggunakan SimpleWorkerRequest secara langsung atau memperluasnya.

Juga, jika Anda melihat dokumentasi MSDN untuk System.Web.Hosting namespace ( SimpleWorkerRequestada di namespace ini), Anda juga akan melihat sesuatu yang mirip dengan di atas (sekali lagi, penekanan ada pada saya):

Namespace System.Web.Hosting menyediakan fungsionalitas untuk meng-hosting aplikasi ASP.NET dari aplikasi yang dikelola di luar Microsoft Internet Information Services (IIS) .

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.

chue x
sumber
2
Saya melompat-lompat untuk menemukan solusi yang dapat diimplementasikan dalam kode, tapi ini dekat dengan "cukup baik" karena mendapat jadi saya menghadiahkan karunia untuk itu. Tapi saya kira solusi yang disediakan oleh @danijelk akan sangat berguna bagi kebanyakan orang yang menemukan pertanyaan ini karena alasan selain yang saya sebutkan. Jadi ini adalah catatan bagi mereka untuk melihatnya.
Ivan Peric
650

Cobalah mendaftar ulang ASP.NET dengan aspnet_regiis -i. Ini berhasil untuk saya.

Kemungkinan jalur untuk .NET 4 (dari command prompt tinggi):

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

http://forums.iis.net/p/1190643/2026401.aspx

danijelk
sumber
Terima kasih atas jawaban Anda. Saya sudah mencobanya dan tidak berhasil. :( -
Osama khodrog
8
Tidak berfungsi untuk Windows Server 2012. Baca pos Zach di halaman ini.
Ivan Akcheurov
Terima kasih. Bekerja untuk saya melakukan ini pada mesin virtual di Azure. Yang ingin saya ketahui adalah mengapa saya harus melakukan ini pada instalasi baru. Tentunya ASPNET mendaftar sendiri ketika menginstal, kan? Dugaan saya ada hubungannya dengan urutan pemasangan.
David Bridge
4
Jika Anda menggunakan .NET 4.5.x atau 4.6.x, jangan tertipu oleh jawaban yang menyebutkan 4.0 dan berpikir itu tidak berlaku untuk Anda. Masalah ini dapat dikaitkan dengan urutan pemasangan .NET sebelum IIS, seperti halnya bagi saya. Menjalankan perintah (dalam kasus saya versi 64 bit) memperbaikinya meskipun aplikasi saya menggunakan .NET 4.5.2.
Coxy
windows 2008, installer AWS microserver mengharuskan saya untuk menjalankan perintah ini..Hanya bagi kita yang menganggapnya tidak relevan dengan sistem mereka.
Terarium
170

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 ...

Zach
sumber
3
Konfigurasi Windows Server adalah PITA. Mengapa tidak ada sistem manajemen paket pusat?
Kugel
jika Anda menginstal iis dengan platform web, periksa komentar Virgo139, itu menyelesaikan masalah saya dengan mudah
castors33
Ini adalah perbaikan untuk saya di Windows 10 Pro build 1607, tepuk tangan!
Apogee
Ini memperbaikinya bagi saya di WIndows 10 juga. Perlu dicatat bahwa perbaikan baris perintah yang umum (aspnet_regiis.exe -i) tidak diizinkan pada Windows 10.
Nat Webb
Solusi terkonfirmasi untuk windows 10 Pro.
Zoomzoom
59

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

Jonathan
sumber
2
Terima kasih telah mengeja, saya menatap Web Server -> Web Server -> Web Server untuk waktu yang terlalu lama ... :)
Gleno
2
Jangan lupa untuk memeriksa Peran dan Fitur> Peran Server> Server Web (IIS)> Server Web> Pengembangan Aplikasi> ASP.NET 4.6 (atau 4,5 tergantung pada pengaturan Anda)
Lionet Chen
1
Yap, kemudian reboot Layanan IIS. Bekerja untukku! Terima kasih. +1
Rusty Nail
47

Untuk Windows 10 / Windows Server 2016 gunakan perintah berikut:

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

Jawaban yang disarankan dengan aspnet_regiistidak berfungsi pada Windows 10 (Pembaruan Pembuat dan yang lebih baru) atau Windows Server 2016:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS versi 4.0.30319.0
Utilitas administrasi untuk menginstal dan menghapus instalan ASP.NET pada mesin lokal.
Hak Cipta (C) Microsoft Corporation. Seluruh hak cipta.
Mulai menginstal ASP.NET (4.0.30319.0).
Opsi ini tidak didukung pada versi sistem operasi ini. Sebaliknya, administrator harus menginstal / mencopot ASP.NET 4.5 dengan IIS8 menggunakan dialog "Aktifkan / Nonaktifkan Fitur Windows, alat manajemen Server Manager, atau alat baris perintah dism.exe. Untuk detail lebih lanjut, lihat http://go.microsoft.com/fwlink/?LinkID=216771 .
Selesai menginstal ASP.NET (4.0.30319.0).

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.

Bart Verkoeijen
sumber
Ini memperbaikinya bagi saya, saya menjalankan Windows 10 pro dengan pembaruan pembuat. Terima kasih!
Samuel Poirier
Jawaban legendaris! Saya harus membangun kembali server web saya, dan belum memperbarui skrip dalam beberapa tahun, saya telah menambahkan perintah DISM ini ke skrip penyediaan VM saya, bekerja seperti pesona.
Chris Schaller
dism / online / enable-feature / featuresename: IIS-ASPNET45 / all Bekerja untuk saya di Windows Server 2016
Syed Nasir Abbas
Berkat kamu, aku masih punya pekerjaan! :) Bekerja.
Scott
42

Jalankan salah satu dari perintah ini:

Untuk OS Windows 32 Bit:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

Untuk OS Windows 64 Bit:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
pengguna3896335
sumber
Saya perhatikan ketika melakukan ini, folder, "aspnet_client" akan ditambahkan ke situs web di bawah direktori Sites dari IIS Connections
eaglei22
26

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:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Neshta
sumber
FWIW, Server 2012 R2 mengatakan opsi ini tidak didukung, dan menyarankan menggunakan dialog Fitur untuk mengaktifkan ASP.NET 4.5
bvj
Ya, jawaban Zach mencakup ini.
Neshta
13

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

Xaris Fytrakis
sumber
1
Milik saya adalah IIS pada Windows 2012 R2. Menambahkan ASP.NET yang kompatibel di Server Manager> Kelola> Tambahkan Peran dan Fitur> Instalasi berbasis-peran atau berbasis-fitur> (pilih server Anda)> Server Web (IIS)> Server Web> Pengembangan Aplikasi> ASP.NET 4.5. Seperti @ArsmanAhmad mengatakan pemeriksaan kewarasan yang baik adalah untuk memverifikasi apakah App Pool Anda. Versi NET CLR diatur ke v4.0.
GBU
6

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.

  1. Temukan aspnet_regi dalam folder yang mirip dengan jalur ini. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. 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.

  3. Kembali ke aspnet_regi yang dapat dieksekusi. Klik-tarik langsung ke prompt perintah atau salin-tempel alamat ke prompt perintah.

  4. 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.

shubniggurath
sumber
Bekerja dengan sempurna untuk saya. Terima kasih.
Mike
5

Pastikan Anda telah mengatur application-siteversi Anda dari v2.0pada v4.0di IIS Manager :

Kolam Aplikasi> Aplikasi Anda> Pengaturan Lanjut> Versi .NET Framework

Setelah itu, instal ASP.NET.

Untuk OS 32-Bit (Windows):

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i

Untuk OS 64-Bit (Windows):

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -i

Mulai ulang Anda application-sitedi IIS Manager dan nikmatilah.

Arsman Ahmad
sumber
Ya, saya mencoba yang terbaik untuk membuat jawaban paling sederhana. ;-) @yuyangJian
Arsman Ahmad
4

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.

jwdaigle
sumber
4

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

theodor.johannesen
sumber
Saya harus menambahkan bahwa ini adalah edisi windows 10 pro
theodor.johannesen
2

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.

<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
        <add initializationPage="/docs" />    
</applicationInitialization>

Terima kasih kepada https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI

shemanov
sumber
2

Saya memecahkan masalah ini, menambahkan "Hidupkan atau matikan fitur Windows" Opsi ASP.NET 4.7

masukkan deskripsi gambar di sini

Edgar Chivichon
sumber
1

Saya punya masalah ini dan menemukan bahwa menghapus folder berikut ini membantu, bahkan dengan edisi non-Express. Express:

C:\Users\<user>\Documents\IISExpress

Thomas Bratt
sumber
1

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.

pirsqua
sumber
Baru saja mengalami masalah yang sama. Menginstal beberapa pembaruan windows yang beralih di sekitar pengaturan IIS saya. Mematikan WebDAV Publishing memperbaikinya lagi.
ElliotSchmelliot
0

Anda bisa memperbaikinya dengan mengubah tipe "ExtensionlessUrlHandler-Integrated-4.0" di iis ke System.Web.DefaultHttpHandler

pengguna3661608
sumber
0

Bagi saya, menghapus WebDAV dari server saya menyebabkan aplikasi mengembalikan 503 Service Unavailablepesan kesalahan saat menggunakan PUTatauDELETE , 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 PUTatau DELETE.

Nonaktifkan WebDAV untuk Kumpulan Aplikasi Individual:

  1. Klik kumpulan aplikasi yang terpengaruh
  2. Temukan WebDAV Authoring Tools dalam daftar
  3. Klik untuk membukanya
  4. Klik Disable WebDAVdi kanan atas.

Ta daaaa!

Saya masih meninggalkan item hapus di web.configfile saya .

 <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
 <system.webServer>

Tautan ini adalah tempat saya menemukan instruksi tetapi tidak terlalu jelas.

Luke
sumber
0

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!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true">
  <add initializationPage="/" />
</applicationInitialization>
...

Meskipun situs web adalah php, perutean ke halaman dikelola oleh modul !!!

Schwarzie2478
sumber
0

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 Installerdan menginstal paket-paket berikut:

masukkan deskripsi gambar di sini

jujur
sumber
0

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.

Dipendu Paul
sumber
0

Instalasi .NET 4.7 bekerja untuk saya. Saya hanya menginstal 3,5 sebelumnya.masukkan deskripsi gambar di sini

Eric S.
sumber