Program obsługi „ExtensionlessUrlHandler-Integrated-4.0” ma zły moduł „ManagedPipelineHandler” na liście modułów

252

Szczerze mówiąc, próbowałem rzucić brudną sztuczkę na IIS i kiedy pomyślałem, że mi się to uda, zdałem sobie sprawę, że moje obejście nie działa. Oto, co próbowałem zrobić:

1) Mam aplikację ASP.NET, która ma klasę Preloader, która dziedziczy IProcessHostPreloadClient i wykonuje całą ciężką inicjalizację w implementacji metody Preload (aplikacja jest złożona i stanowi część ogromnego systemu, więc ustanowienie połączeń ze wszystkimi niezbędnymi elementami zajmuje około 2 minut usługi i wstępnie zarejestrować niektóre rejestracje Unity).

2) Mam dużo pracy, którą należy wykonać przy zamykaniu aplikacji (anulowanie subskrypcji, rozłączenie, usunięcie, ...), i chyba najlepszym miejscem do tego jest metoda * Application_End * znajdująca się w Global.asax .

3) Wszystko działa dobrze, gdy mam aktywność użytkownika (pierwsze żądanie po uruchomieniu puli aplikacji zawierającej wspomnianą aplikację internetową spowoduje wywołanie * Application_Start *, a następnie * Application_End * zostanie wywołane przy zatrzymaniu lub recyklingu puli aplikacji), ale problemy występuje, gdy nie ma aktywności użytkownika, a aplikacja próbuje się zrestartować po 48 godzinach aktywności (skonfigurowane wymaganie). Ponieważ nie było żadnych żądań, aplikacja oficjalnie się nie rozpoczęła. Ergo, nie można go z wdziękiem zatrzymać, ponieważ * Application_End * nie zostanie wywołane.

4) Teraz pojawia się bałagan ... Próbowałem wysłać żądanie GET z kodu na końcu metody Preload i zadziałało. Ale to rozwiązanie wydawało mi się złe, mimo że zadziałało. Próbowałem wielu rzeczy, a ostatnią rzeczą, jakiej próbowałem, było:

SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);

... i to spełniło swój cel. Wywołano * Application_Start * (sprawdziłem odpowiedź, zawierała stronę logowania, która miała być wyświetlana w początkowym żądaniu), a aplikacja zamykania puli aplikacji zakończyła się z wdziękiem wykonując niezbędną pracę w * Application_End *.

ALE

Po uruchomieniu aplikacji (wstępnie załadowanym i zainicjowanym) w ten sposób stało się to, gdy chciałem uzyskać dostęp do aplikacji za pośrednictwem przeglądarki internetowej:

Błąd HTTP 500.21 - Wewnętrzny moduł obsługi błędów serwera „ExtensionlessUrlHandler-Integrated-4.0” ma zły moduł „ManagedPipelineHandler” na liście modułów

Nie jestem w stanie tego rozgryźć. Czy ktoś może mi powiedzieć, dlaczego tak się dzieje i jak to naprawić?

Jeśli tego nie rozwiążę, wrócę do pierwszego rozwiązania (wysyłanie żądania GET z kodu), ale ten problem mnie popsunie, ponieważ nawet nie mam pojęcia, co jest nie tak.

Ivan Peric
źródło
jakiej wersji IIS używasz?
chue x
IIS 7.5 (7.5.7600.16385)
Ivan Peric
Nie jest to bezpośrednia odpowiedź na twoje pytanie, ale dla innych użytkowników z podobnym problemem i przy założeniu, że masz aplikację internetową: możesz po prostu skorzystać z zewnętrznej usługi, takiej jak uptimerobot.com, aby dotykać swojej aplikacji co X razy. Utrzymujesz aplikację w stanie uruchomionym + masz dodatkowe zalety usługi (czas pracy, alerty itp.).
qbantek
@qbantek Mimo że aplikacja, nad którą pracuję, nie jest połączona z Internetem, dałeś mi dobry pomysł. Mógłbym użyć modułu równoważenia obciążenia do okresowego dotykania, ustawiając typ sprawdzania stanu zdrowia na Prosty HTTP GET. Dzięki
Ivan Peric

Odpowiedzi:

24

Problem

Korzystasz z SimpleWorkerRequest w scenariuszu, dla którego nie został zaprojektowany. Używasz go w IIS . Jeśli spojrzysz na poprzedni link MSDN (nacisk jest mój):

Zapewnia prostą implementację klasy abstrakcyjnej HttpWorkerRequest, której można używać do hostowania aplikacji ASP.NET poza aplikacją Internetowych usług informacyjnych (IIS) . Możesz zastosować SimpleWorkerRequest bezpośrednio lub go rozszerzyć.

Ponadto, jeśli spojrzysz na dokumentację MSDN dla przestrzeni nazw System.Web.Hosting ( SimpleWorkerRequestznajduje się w tej przestrzeni nazw), zobaczysz również coś podobnego do powyższego (ponownie nacisk jest mój):

Przestrzeń nazw System.Web.Hosting zapewnia funkcjonalność do hostowania aplikacji ASP.NET z aplikacji zarządzanych poza Microsoft Internet Information Services (IIS) .

Rozwiązanie

Polecam usunięcie połączenia z SimpleWorkerRequest. Zamiast tego możesz użyć rozwiązania Microsoft, aby upewnić się, że Twoja strona internetowa uruchomi się automatycznie po ponownym uruchomieniu. Potrzebny jest moduł inicjowania aplikacji Microsoft dla IIS 7.5 . Konfiguracja nie jest skomplikowana, ale musisz zrozumieć dokładne opcje. Dlatego też poleciłbym również interfejs użytkownika inicjalizacji aplikacji dla IIS 7.5 . Interfejs użytkownika został napisany przez blogera MSDN.

Co dokładnie robi rozwiązanie Microsoft? Robi to, co próbujesz zrobić - IIS wysyła żądanie „get” do Twojej witryny po uruchomieniu puli aplikacji.

Chue X
źródło
2
Miałem nadzieję znaleźć rozwiązanie, które można zaimplementować w kodzie, ale jest to tak „wystarczająco dobre”, jak to tylko możliwe, więc przyznam nagrodę za to. Ale wydaje mi się, że rozwiązanie dostarczone przez @danijelk będzie najbardziej przydatne dla większości osób, które napotkają to pytanie z innego powodu niż ten, który podałem. Jest to więc uwaga dla nich, aby na nie spojrzeć.
Ivan Peric
650

Spróbuj ponownie zarejestrować ASP.NET w aspnet_regiis -i. To zadziałało dla mnie.

Prawdopodobna ścieżka do .NET 4 (z wiersza polecenia z podwyższonym poziomem uprawnień):

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

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

danijelk
źródło
Dziękuję za Twoją odpowiedź. Próbowałem już tego i nie zadziałało. :( -
Osama khodrog,
8
Nie działa w systemie Windows Server 2012. Przeczytaj post Zach na tej stronie.
Ivan Akcheurov,
Dzięki. Pracowałem dla mnie, robiąc to na maszynie wirtualnej na platformie Azure. Chciałbym jednak wiedzieć, dlaczego muszę to robić przy nowej instalacji. Z pewnością program ASPNET rejestruje się podczas instalacji, prawda? Domyślam się, że ma to związek z kolejnością instalacji.
David Bridge,
4
Jeśli korzystasz z .NET 4.5.x lub 4.6.x, nie daj się zwieść odpowiedzi z informacjami 4.0 i myśleniem, że ona Cię nie dotyczy. Ten problem może być związany z kolejnością instalacji .NET przed IIS, tak jak było dla mnie. Uruchomienie polecenia (w moim przypadku wersji 64-bitowej) naprawiło je, mimo że moja aplikacja korzysta z .NET 4.5.2.
Coxy
Windows 2008, nowa instalacja AWS mikroserwer wymagała ode mnie uruchomienia tego polecenia ... Tylko dla tych z nas, którzy uważają, że nie ma to związku z ich systemem.
terary
170

Jeśli napotykasz ten błąd w systemach Windows 8 / Windows Server 2012 i .Net 4.5, postępuj zgodnie z tymi instrukcjami tutaj: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Przejdź do „włączania lub wyłączania funkcji systemu Windows”, a następnie Internetowych usług informacyjnych, następnie usług WWW, następnie funkcji programowania aplikacji, a następnie włącz ASP.NET 4.5

To zadziałało dla mnie (chociaż kreator i sformułowania są nieco inne w systemie Windows Server 2012, ale zrozumiesz to). Biorąc to pod uwagę, dlaczego jest to konieczne po zainstalowaniu wszystkiego za pośrednictwem Instalatora platformy internetowej, w tym wszystkich zależności, jest całkowicie poza mną ...

Zach
źródło
3
Konfiguracja Windows Server to PITA. Dlaczego nie ma centralnego systemu zarządzania pakietami?
Kugel,
jeśli zainstalowałeś iis z platformą internetową, sprawdź komentarz Virgo139, to łatwo rozwiązało mój problem
castors33
To była poprawka dla mnie na Windows 10 Pro build 1607, na zdrowie!
Apogee
Naprawiłem to również dla WIndows 10. Warto zauważyć, że wspólna poprawka wiersza polecenia (aspnet_regiis.exe -i) jest niedozwolona w systemie Windows 10.
Nat Webb
Potwierdzone rozwiązanie dla systemu Windows 10 Pro.
Zoomzoom,
59

Pomimo przestrzegania większości porad na tej stronie wciąż miałem problemy z systemem Windows Server 2012. Zainstalowanie .NET Extensibility 4.5 rozwiązało to dla mnie:

Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5

Jonathan
źródło
2
Dzięki, że to przeliterowałem, wpatrywałem się w Web Server -> Web Server -> Web Server pipe o wiele za długo ... :)
Gleno
2
Nie zapomnij sprawdzić Ról i funkcji> Roli serwera> Serwer sieci Web (IIS)> Serwer sieci Web> Programowanie aplikacji> ASP.NET 4.6 (lub 4.5 w zależności od konfiguracji)
Lionet Chen
1
Tak, a następnie uruchom ponownie usługę IIS. Pracował dla mnie! Dzięki. +1
Rusty Nail
47

W systemie Windows 10 / Windows Server 2016 użyj następującego polecenia:

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

Sugerowane odpowiedzi aspnet_regiisnie działają w systemie Windows 10 (Creators Update i nowszym) lub Windows Server 2016:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS wersja 4.0.30319.0
Narzędzie administracyjne do instalowania i odinstalowywania ASP.NET na komputerze lokalnym.
Prawa autorskie (C) Microsoft Corporation. Wszelkie prawa zastrzeżone.
Rozpocznij instalację programu ASP.NET (4.0.30319.0).
Ta opcja nie jest obsługiwana w tej wersji systemu operacyjnego. Zamiast tego administratorzy powinni zainstalować / odinstalować program ASP.NET 4.5 z IIS8 za pomocą okna dialogowego „Włączanie / wyłączanie funkcji systemu Windows”, narzędzia do zarządzania Menedżera serwera lub narzędzia wiersza polecenia. Aby uzyskać więcej informacji, zobacz http://go.microsoft.com/fwlink/?LinkID=216771 .
Zakończono instalację ASP.NET (4.0.30319.0).

Co ciekawe, okno dialogowe „Włączanie / wyłączanie funkcji systemu Windows” nie pozwoliło mi odznaczyć programów .NET ani ASP.NET 4.6 i działało tylko powyższe polecenie DISM. Nie jestem pewien, czy featurename jest poprawna, ale pracował dla mnie.

Bart Verkoeijen
źródło
To naprawiło to dla mnie, działałem Windows 10 pro z aktualizacją twórcy. Dzięki!
Samuel Poirier,
Legendarna odpowiedź! Musiałem odbudować mój serwer WWW i nie aktualizowałem skryptów od kilku lat, dodałem to polecenie DISM do moich skryptów inicjujących VM, działa jak urok.
Chris Schaller,
dism / online / enable-feature / featurename: IIS-ASPNET45 / all Pracował dla mnie w systemie Windows Server 2016
Syed Nasir Abbas
Dzięki tobie wciąż mam pracę! :) Pracował.
Scott
42

Uruchom jedno z następujących poleceń:

W 32-bitowym systemie operacyjnym Windows:

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

W 64-bitowym systemie operacyjnym Windows:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
użytkownik3896335
źródło
Zauważyłem, że robiąc to, folder „aspnet_client” zostaje dodany do witryny w katalogu Witryny połączeń IIS
eaglei22
26

Ten https://stackoverflow.com/a/13266763/1277458 działa idealnie. Ale jeśli masz 64-bitowy system operacyjny, użyj Framework64 zamiast Framework w ścieżce:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Neshta
źródło
FWIW, Server 2012 R2 mówi, że ta opcja nie jest obsługiwana, i sugeruje użycie okna dialogowego Funkcji, aby włączyć ASP.NET 4.5
bvj
Tak, odpowiedź Zacha to obejmuje.
Neshta
13

W moim przypadku (Windows 10 + IIS 10) musiałem otworzyć „ Włącz lub wyłącz funkcje systemu Windows ”, a następnie przejdź do Internetowych usług informacyjnych> Usługi WWW> Funkcje rozwoju aplikacji> i sprawdź ASP.NET 4.6

Xaris Fytrakis
źródło
1
Mój był IIS na Windows 2012 R2. Dodano kompatybilną platformę ASP.NET w Menedżerze serwera> Zarządzaj> Dodaj role i funkcje> Instalacja oparta na rolach lub oparta na funkcjach> (wybierz serwer)> Serwer sieci Web (IIS)> Serwer sieci Web> Tworzenie aplikacji> ASP.NET 4.5. Jak powiedział @ArsmanAhmad, dobrym sprawdzeniem czystości jest sprawdzenie, czy twoja pula aplikacji .NET CLR w wersji jest ustawiona na v4.0.
GBU,
6

Robienie tego własnego posta, bo to działało przez wiele godzin.

Widziałem może kilkanaście podobnych postów tutaj i gdzie indziej na temat tego problemu i poprawki aspnet_regiis. Nie działały dla mnie, a aspnet_regiis zachowywał się dziwnie, tylko wyświetlał opcje itp.

Jak wskazano powyżej użytkownik Ryan-Anderson, nie można wprowadzić .exe

Dla tych, którzy są mniej wygodni w pracy poza IIS na serwerze, oto co robisz w prostych krokach.

  1. Znajdź aspnet_regiis w folderze podobnym do tej ścieżki. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. Kliknij prawym przyciskiem myszy wiersz polecenia w menu Start lub w dowolnym miejscu i każ mu uruchomić się jako administrator. Korzystanie z funkcji „Uruchom” systemu Windows po prostu nie działa lub dla mnie nie działało.

  3. Wróć do pliku wykonywalnego aspnet_regiis. Kliknij i przeciągnij go bezpośrednio do wiersza polecenia lub skopiuj i wklej adres w wierszu polecenia.

  4. Usuń, jeśli jest, plik .exe na końcu. To jest klucz. Na końcu dodaj -i (spacja minus oko). Wchodzić.

Jeśli zrobiłeś to poprawnie, zobaczysz, że zaczyna instalować asp.net, a następnie powie ci, że się udało.

shubniggurath
źródło
Działa dla mnie idealnie. Dziękuję Ci.
Mike
5

Upewnij się, że ustawiłeś application-sitewersję od v2.0do v4.0w Menedżerze IIS :

Pule aplikacji> Twoja aplikacja> Ustawienia zaawansowane> Wersja .NET Framework

Następnie zainstaluj swój ASP.NET.

W przypadku 32-bitowego systemu operacyjnego (Windows):

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

W przypadku 64-bitowego systemu operacyjnego (Windows):

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

Uruchom ponownie application-sitew IIS Manager i ciesz się.

Arsman Ahmad
źródło
Tak, starałem się, aby odpowiedź była najprostsza. ;-) @yuyangJian
Arsman Ahmad
4

Wiem, że to jest staruszek, ale pomyślałem, że mogę wnieść jakąś wartość. Jeśli korzystasz z Server Core poza domeną (członkowie domeny mogą po prostu uruchomić Menedżera serwera zdalnie, aby dodać / usunąć funkcje / role), musisz skorzystać z wiersza poleceń.

Użytkownicy programu PowerShell mogą wpisać „Install-WindowsFeature Web-Asp-Net45”

Powinno to być równoważne z użyciem menedżera serwera.

jwdaigle
źródło
4

Wystąpił problem z tym samym komunikatem o błędzie przy zainstalowanym programie .net 4.7.

Rozwiązaniem było pójście za jednym z wcześniej wspomnianych postów, aby przejść do „Włączania lub wyłączania funkcji systemu Windows”, w której zaznaczono już „Zaawansowane usługi .NET Framework 4.7” -> „ASP.NET 4.7”.

W dalszej części listy znajdują się „Internetowe usługi informacyjne” i przypis „Funkcje tworzenia aplikacji” -> „ASP.NET 4.7”, który również należy sprawdzić.

Po włączeniu tej opcji włączono wiele innych funkcji ... Po prostu nacisnąłem przycisk OK i problem został rozwiązany. Screendump okna dialogowego funkcji systemu Windows

theodor.johannesen
źródło
Powinienem dodać, że była to edycja pro dla systemu Windows 10
theodor.johannesen,
2

Pracuję nad systemem Windows Server 2012. Funkcja rozszerzenia .NET 4.5 jest włączona. Moduł WebDAV został usunięty. Wciąż otrzymywałem błąd 500.21 na trasie / dokumentach ASP.NET.

Zmiana „skipManagedModules” na false rozwiązała problem.

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

Dzięki https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI

shemanov
źródło
2

Rozwiązałem ten problem, dodając „Włączanie lub wyłączanie funkcji systemu Windows” Opcja ASP.NET 4.7

wprowadź opis zdjęcia tutaj

Edgar Chivichon
źródło
1

Miałem ten problem i stwierdziłem, że usunięcie następującego folderu pomogło, nawet w przypadku edycji innej niż Express.

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

Thomas Bratt
źródło
1

Ten błąd zaczął mi się pojawiać znikąd w zeszłym tygodniu, wpływając na istniejące strony internetowe na moim komputerze. Nie miałem szczęścia wypróbować żadnej z sugestii tutaj. W końcu całkowicie usunąłem WebDAV z IIS (Funkcje systemu Windows -> Internetowe usługi informacyjne -> Internetowe usługi sieciowe -> Wspólne funkcje HTTP -> Publikowanie WebDAV). Zrobiłem reset IIS po tym dla dobrego pomiaru, a mój błąd został w końcu rozwiązany.

Mogę tylko zgadywać, że aktualizacja systemu Windows spowodowała problem, ale nie jestem pewien.

pirsqua
źródło
Właśnie miałem ten sam problem. Zainstalowałem niektóre aktualizacje systemu Windows, które zmieniły moje ustawienia IIS. Wyłączenie publikowania WebDAV naprawiło to ponownie.
ElliotSchmelliot
0

Można to naprawić, zmieniając typ „ExtensionlessUrlHandler-Integrated-4.0” w systemie iis na System.Web.DefaultHttpHandler

użytkownik3661608
źródło
0

Dla mnie usunięcie WebDAV z mojego serwera spowodowało, że aplikacja zwróciła 503 Service Unavailablekomunikat o błędzie podczas używania PUTlub DELETE, więc ponownie go zainstalowałem. Próbowałem także całkowicie usunąć .NET Framework 4.5 i ponownie go zainstalować, a także próbowałem ponownej rejestracji zgodnie z sugestią, ale bezskutecznie.

Byłem w stanie to naprawić, wyłączając WebDAV dla indywidualnej puli aplikacji, co zatrzymało błąd „złego modułu” podczas używania PUTlub DELETE.

Wyłącz WebDAV dla indywidualnej puli aplikacji:

  1. Kliknij pulę aplikacji, której dotyczy problem
  2. Znajdź WebDAV Authoring Toolsna liście
  3. Kliknij, aby go otworzyć
  4. Kliknij Disable WebDAVw prawym górnym rogu.

Ta daaaa!

Nadal pozostawiłem usunięte elementy w moim web.configpliku.

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

Ten link zawiera instrukcje, ale nie jest zbyt jasny.

Łukasz
źródło
0

To może nie jest przydatne rozwiązanie dla OP, ale dotyczy tego samego komunikatu o błędzie.

Hostujemy strony PHP na IIS8.5 z poprawnie zainstalowanym programem .NET 4.5.

Korzystamy z funkcji wstępnego ładowania, aby mieć pewność, że nasza aplikacja zawsze reaguje na wszystkie pytania.

Po pewnym czasie zaczęliśmy losowo otrzymywać ten błąd.

W pliku web.config: ustawiłem skipManagedModules na true, -> nie rób tego!

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

Chociaż strona internetowa to php, routing do stronicowania jest zarządzany przez moduły !!!

Schwarzie2478
źródło
0

Wpadłem również na ten problem. Moja aplikacja MVC4 działa na systemie Windows Server 2012 R2 z IIS 8.5. Żadne z tych opublikowanych rozwiązań nie działało dla mnie ... instalacja brakujących platform za pomocą IIS Funkcje mogła rozwiązać problem, ale instalacja zawsze kończyła się niepowodzeniem.

Musiałem użyć Web Platform Installeri zainstalować następujące pakiety:

wprowadź opis zdjęcia tutaj

Szczery
źródło
0

Napotkałem ten problem w aplikacji internetowej hostowanej na współdzielonym serwerze hostingowym. Oczywiście nie miał bezpośredniego dostępu do IIS, więc nie mógł zastosować wielu proponowanych tutaj rozwiązań.

W panelu sterowania dostawcy hostingu włączyłem rejestrowanie błędów dla IIS i ASP.Net. A potem dowiedziałem się, że błąd faktycznie leżał w brakującym pliku cshtml.

Dipendu Paul
źródło
0

Instalacja .NET 4.7 działała dla mnie. Wcześniej zainstalowałem tylko 3.5.wprowadź opis zdjęcia tutaj

Eric S.
źródło