Il gestore "ExtensionlessUrlHandler-Integrated-4.0" ha un modulo errato "ManagedPipelineHandler" nell'elenco dei moduli


252

Ad essere sincero, ho provato a trasformare un brutto scherzo in IIS e proprio quando pensavo che stavo per cavarmela, mi sono reso conto che la mia soluzione alternativa non funzionava. Ecco cosa ho provato a fare:

1) Ho un'applicazione ASP.NET che ha la classe Preloader che eredita IProcessHostPreloadClient e fa tutta l'inizializzazione pesante nell'implementazione del metodo Preload (l'applicazione è complessa e fa parte di un sistema enorme, quindi richiede circa 2 minuti per stabilire connessioni a tutto il necessario servizi e pre-istanza di alcune registrazioni di Unity).

2) Ho molto lavoro da fare sull'arresto dell'applicazione (annullamento dell'iscrizione, disconnessione, eliminazione, ...) e immagino che il posto migliore per farlo sia nel metodo * Application_End * che si trova in Global.asax .

3) Tutto funziona perfettamente quando ho attività dell'utente (la prima richiesta dopo l'avvio del pool di applicazioni che contiene l'applicazione Web di cui sopra farà sì che * Application_Start * venga chiamato e successivamente * Application_End * venga chiamato all'arresto o al riciclo del pool di applicazioni), ma i problemi si verifica quando non vi sono attività dell'utente e l'applicazione tenta di riavviarsi dopo essere stata attiva per 48 ore (requisito configurato). Poiché non vi erano richieste, l'applicazione non è stata ufficialmente avviata. Ergo, non può essere fermato con garbo poiché * Application_End * non verrà chiamato.

4) Ora arriva la parte disordinata ... Ho provato a fare una richiesta GET dal codice alla fine del metodo Preload , e ha funzionato. Ma questa soluzione mi è sembrata male, anche se ha funzionato. Quindi, ho provato molte cose e l'ultima cosa che ho provato è stata questa:

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

... e quello ha fatto il suo scopo. È stato chiamato * Application_Start * (ho controllato la risposta, conteneva una pagina di accesso che doveva essere visualizzata nella richiesta iniziale) e sull'applicazione di arresto del pool di applicazioni è terminata correttamente facendo il lavoro necessario in * Application_End *.

MA

Dopo che l'applicazione è stata avviata (precaricata e avviata) in questo modo, questo è quello che è successo quando volevo raggiungere l'applicazione tramite browser Web:

Errore HTTP 500.21 - Il gestore di errori del server interno "ExtensionlessUrlHandler-Integrated-4.0" ha un modulo errato "ManagedPipelineHandler" nell'elenco dei moduli

Non riesco a capirlo. Qualcuno può dirmi perché questo accade e come risolverlo?

Se non lo capisco, tornerò alla prima soluzione (invio della richiesta GET dal codice) ma questo problema mi guasterà dal momento che non ho nemmeno idea di cosa non vada.


quale versione di IIS stai usando?
chue x

IIS 7.5 (7.5.7600.16385)
Ivan Peric,

Non è una risposta diretta alla tua domanda, ma per gli altri utenti con problemi simili e ipotesi che tu abbia un'applicazione per Internet: puoi semplicemente usare un servizio esterno come uptimerobot.com per toccare la tua applicazione ogni X volte. Mantieni la tua app in esecuzione + hai i vantaggi aggiuntivi del servizio (uptime, avvisi, ecc.).
qbantek,

@qbantek Anche se l'applicazione a cui sto lavorando non è rivolta a Internet, mi hai dato una buona idea. Potrei usare il bilanciamento del carico per fare un tocco periodico impostando il tipo di controllo dello stato di integrità su HTTP semplice. Grazie
Ivan Peric,

Risposte:


24

Il problema

Stai utilizzando SimpleWorkerRequest in uno scenario per cui non è stato progettato. Lo stai usando all'interno di IIS . Se si guarda al precedente collegamento MSDN (l'enfasi è mia):

Fornisce una semplice implementazione della classe astratta HttpWorkerRequest che può essere utilizzata per ospitare applicazioni ASP.NET al di fuori di un'applicazione Internet Information Services (IIS) . È possibile utilizzare SimpleWorkerRequest direttamente o estenderlo.

Inoltre, se guardi la documentazione MSDN per lo spazio dei nomi System.Web.Hosting (si SimpleWorkerRequesttrova in questo spazio dei nomi), vedrai anche qualcosa di simile al precedente (di nuovo, l'enfasi è mia):

Lo spazio dei nomi System.Web.Hosting fornisce la funzionalità per l'hosting di applicazioni ASP.NET da applicazioni gestite al di fuori di Microsoft Internet Information Services (IIS) .

La soluzione

Consiglierei di rimuovere la chiamata a SimpleWorkerRequest. Invece, puoi utilizzare una soluzione Microsoft per assicurarti che il tuo sito web si avvii automaticamente dopo il riciclo. Ciò di cui hai bisogno è Microsoft Application Initialization Module per IIS 7.5 . Non è complicato da configurare, ma è necessario comprendere le opzioni esatte. Questo è il motivo per cui consiglierei anche l' interfaccia utente di inizializzazione dell'applicazione per IIS 7.5 . L'interfaccia utente è scritta da un blogger MSDN.

Cosa fa esattamente la soluzione Microsoft? Fa quello che stai cercando di fare: IIS invia una richiesta "get" al tuo sito Web dopo l'avvio del pool di applicazioni.


2
Stavo saltando alla ricerca di una soluzione che può essere implementata nel codice, ma questo è il più vicino possibile a un "abbastanza buono", quindi gli conferisco la generosità. Ma suppongo che la soluzione fornita da @danijelk sarà molto utile per la maggior parte delle persone che incontrano questa domanda per motivi diversi da quelli specificati. Quindi questa è una nota per loro di dargli un'occhiata.
Ivan Peric,

650

Prova a registrare nuovamente ASP.NET con aspnet_regiis -i. Ha funzionato per me.

Un percorso probabile per .NET 4 (dal prompt dei comandi con privilegi elevati):

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

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


La ringrazio per la risposta. L'ho già provato e non ha funzionato. :( -
Osama khodrog,

8
Non funziona per Windows Server 2012. Leggi il post di Zach su questa pagina.
Ivan Akcheurov,

Grazie. Ha funzionato per me nel fare ciò su una macchina virtuale in Azure. Quello che vorrei sapere, però, è perché dovrei farlo su una nuova installazione. Sicuramente ASPNET si registra quando si installa giusto? Suppongo che abbia qualcosa a che fare con l'ordine di installazione.
David Bridge,

4
Se stai usando .NET 4.5.xo 4.6.x, non lasciarti ingannare dalla risposta che menziona 4.0 e pensa che non sia applicabile a te. Questo problema può essere correlato all'ordine di installazione di .NET prima di IIS, come è stato per me. L'esecuzione del comando (nel mio caso la versione a 64 bit) lo ha risolto anche se la mia applicazione utilizza .NET 4.5.2.
Coxy,

Windows 2008, microserver AWS di nuova installazione mi ha richiesto di eseguire questo comando ... Solo per quelli di noi che pensano che non sia rilevante per il loro sistema.
terary,

170

Se si verifica questo errore con Windows 8 / Windows Server 2012 e .Net 4.5, seguire queste istruzioni qui: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Vai a "attiva o disattiva le funzionalità di Windows", quindi Internet Information Services, quindi World Wide Web Services, quindi le funzionalità di sviluppo delle applicazioni e quindi abilita ASP.NET 4.5

Questo ha funzionato per me (anche se la procedura guidata e il testo sono leggermente diversi in Windows Server 2012, ma lo capirai). Detto questo, perché questo è necessario dopo aver installato tutto attraverso il programma di installazione della piattaforma Web, comprese tutte le dipendenze, è completamente al di là di me ...


3
La configurazione di Windows Server è una PITA. Perché non esiste un sistema centrale di gestione dei pacchetti?
Kugel

se hai installato iis con la piattaforma web, controlla il commento di Virgo139, il problema si è risolto facilmente
castors33

Questa è stata la soluzione per me su Windows 10 Pro build 1607, evviva!
Apogee,

Questo è stato risolto anche per me su Windows 10. Vale la pena notare che la correzione della riga di comando comune (aspnet_regiis.exe -i) non è consentita su Windows 10.
Nat Webb

Soluzione confermata per Windows 10 Pro.
Zoomzoom,

59

Nonostante seguissi la maggior parte dei consigli in questa pagina, stavo ancora riscontrando problemi su Windows Server 2012. L'installazione di .NET Extensibility 4.5 mi ha risolto:

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


2
Grazie per averlo spiegato, stavo fissando Web Server -> Web Server -> Web Server pipe per troppo tempo ... :)
Gleno,

2
Non dimenticare di selezionare Ruoli e funzionalità> Ruoli server> Server Web (IIS)> Server Web> Sviluppo applicazioni> ASP.NET 4.6 (o 4.5 a seconda della configurazione)
Lionet Chen,

1
Sì, quindi riavviare il servizio IIS. Ha funzionato per me! Grazie. +1
Rusty Nail

47

Per Windows 10 / Windows Server 2016 utilizzare il comando seguente:

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

Le risposte suggerite con aspnet_regiisnon funzionano su Windows 10 (Creators Update e versioni successive) o Windows Server 2016:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Utilità di
amministrazione Microsoft (R) ASP.NET RegIIS versione 4.0.30319.0 per installare e disinstallare ASP.NET sul computer locale.
Copyright (C) Microsoft Corporation. Tutti i diritti riservati.
Inizia l'installazione di ASP.NET (4.0.30319.0).
Questa opzione non è supportata su questa versione del sistema operativo. Gli amministratori dovrebbero invece installare / disinstallare ASP.NET 4.5 con IIS8 utilizzando la finestra di dialogo "Attiva / Disattiva funzionalità di Windows", lo strumento di gestione di Server Manager o lo strumento da riga di comando dism.exe. Per maggiori dettagli, consultare http://go.microsoft.com/fwlink/?LinkID=216771 .
Terminata l'installazione di ASP.NET (4.0.30319.0).

È interessante notare che la finestra di dialogo "Attiva / Disattiva funzionalità di Windows" non mi ha permesso di deselezionare .NET né ASP.NET 4.6, e ha funzionato solo il comando DISM sopra. Non sono sicuro che il nome dell'impresa sia corretto, ma ha funzionato per me.


Questo mi ha risolto, stavo eseguendo Windows 10 Pro con l'aggiornamento del creatore. Grazie!
Samuel Poirier,

Risposta leggendaria! Ho dovuto ricostruire il mio server Web e non ho aggiornato gli script da alcuni anni, ho aggiunto questo comando DISM ai miei script di provisioning VM, funziona come un incantesimo.
Chris Schaller,

dism / online / enable-feature / featurename: IIS-ASPNET45 / all Ha funzionato per me su Windows Server 2016
Syed Nasir Abbas,

Grazie a te, ho ancora un lavoro! :) Lavorato.
Scott,

42

Esegui uno di questi comandi:

Per sistema operativo Windows a 32 bit:

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

Per sistema operativo Windows a 64 bit:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I

Ho notato che durante questa operazione, la cartella "aspnet_client" viene aggiunta al sito Web nella directory Sites di IIS Connections
eaglei22,

26

Questo https://stackoverflow.com/a/13266763/1277458 funziona perfettamente. Ma se hai un sistema operativo a 64 bit usa Framework64 invece di Framework nel percorso:

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

FWIW, Server 2012 R2 afferma che questa opzione non è supportata e suggerisce di utilizzare la finestra di dialogo Funzionalità per abilitare ASP.NET 4.5
bvj

Sì, la risposta di Zach copre questo.
Neshta,

13

Nel mio caso (Windows 10 + IIS 10) ho dovuto aprire " Attiva o Disattiva funzionalità di Windows " e poi andare su Internet Information Services> World Wide Web Services> Funzionalità di sviluppo delle applicazioni> e controllare ASP.NET 4.6


1
Il mio era IIS su Windows 2012 R2. Aggiunto ASP.NET compatibile in Server Manager> Gestisci> Aggiungi ruoli e funzionalità> Installazione basata su ruoli o basata su funzionalità> (selezionare il server)> Server Web (IIS)> Server Web> Sviluppo applicazioni> ASP.NET 4.5. Come ha affermato @ArsmanAhmad, un buon controllo di integrità è verificare se la versione CLR di App Pool .NET è impostata su v4.0.
GBU,

6

Pubblicando questo post perché mi ha fatto andare avanti per ore.

Ho visto forse una dozzina di post simili qui e altrove su questo problema e sulla correzione aspnet_regiis. Non funzionavano per me e aspnet_regiis si comportava in modo strano, elencando solo le opzioni ecc.

Come indicato dall'utente ryan-anderson sopra, non è possibile inserire .exe

Per coloro che sono meno a proprio agio con cose al di fuori di IIS sul server, ecco cosa fai in semplici passaggi.

  1. Trova aspnet_regiis in una cartella simile a questo percorso. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. Fare clic con il pulsante destro del mouse sul prompt dei comandi nel menu di avvio o ovunque e indicare l'esecuzione come amministratore. L'uso della funzione "Esegui" di Windows non funziona o non funziona per me.

  3. Torna all'eseguibile aspnet_regiis. Fare clic e trascinarlo direttamente nel prompt dei comandi o copiare e incollare l'indirizzo nel prompt dei comandi.

  4. Rimuovi, se è presente, il .exe alla fine. Questa è la chiave. Aggiungi il -i (spazio meno occhio) alla fine. Accedere.

Se lo hai fatto correttamente, vedrai che inizia l'installazione di asp.net e quindi ti dice che è riuscito.


Ha funzionato perfettamente per me. Grazie.
Mike,

5

Assicurarsi di aver impostato la application-siteversione da v2.0a v4.0in Gestione IIS :

Pool di applicazioni> La tua applicazione> Impostazioni avanzate> Versione .NET Framework

Successivamente, installa il tuo ASP.NET.

Per sistemi operativi a 32 bit (Windows):

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

Per sistema operativo a 64 bit (Windows):

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

Riavvia il tuo application-sitein IIS Manager e divertiti.


Sì, ho fatto del mio meglio per rendere la risposta più semplice. ;-) @yuyangJian
Arsman Ahmad,

4

So che questo è un vecchio, ma ho pensato di aggiungere un po 'di valore. Per quelli di noi che eseguono Server Core al di fuori di un dominio (i membri del dominio possono semplicemente eseguire Server Manager in remoto per aggiungere / rimuovere funzionalità / ruoli), è necessario ricorrere alle righe di comando.

Gli utenti di Powershell possono digitare "Install-WindowsFeature Web-Asp-Net45"

Ciò dovrebbe equivalere all'utilizzo di Server Manager.


4

Sono stato sfidato dallo stesso messaggio di errore, con .net 4.7 installato.

La soluzione era quella di seguire un post menzionato in precedenza per andare con "Attiva o disattiva la funzionalità di Windows", dove "Servizi avanzati .NET Framework 4.7" -> "ASP.NET 4.7" era già stato verificato.

Più in basso nell'elenco, c'è "Internet Information Services" e la nota secondaria "Funzionalità di sviluppo delle applicazioni" -> "ASP.NET 4.7", che deve anche essere verificata.

Quando lo abilito, sono abilitate molte altre funzionalità ... Ho semplicemente premuto il pulsante Ok e il problema è stato risolto. Screendump della finestra di dialogo delle funzionalità di Windows


Vorrei aggiungere che questo era un Windows 10 pro edizione
theodor.johannesen

2

Sto lavorando su Windows Server 2012. La funzionalità .NET Extensibility 4.5 è attiva. WebDAVModule rimosso. Stavo ancora ricevendo l'errore 500.21 sulla route '/ docs' di ASP.NET.

La modifica di "skipManagedModules" in false ha risolto il problema.

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

Grazie a https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI


2

Ho risolto questo problema, aggiungendo in "Attiva o disattiva le funzionalità di Windows" L'opzione ASP.NET 4.7

inserisci qui la descrizione dell'immagine


1

Ho riscontrato questo problema e ho scoperto che la rimozione della seguente cartella ha aiutato, anche con l'edizione non Express.Express:

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


1

Questo errore ha iniziato a verificarsi dal nulla la scorsa settimana, interessando i siti Web esistenti sulla mia macchina. Non ho avuto fortuna con questo provando uno dei suggerimenti qui. Alla fine ho rimosso completamente WebDAV da IIS (Funzionalità Windows -> Internet Information Services -> World Wide Web Services -> Funzionalità HTTP comuni -> Pubblicazione WebDAV). Ho fatto un ripristino IIS dopo questo per buona misura e il mio errore è stato finalmente risolto.

Posso solo supporre che un aggiornamento di Windows abbia iniziato il problema, ma non posso esserne sicuro.


Ho appena avuto lo stesso problema. Ho installato alcuni aggiornamenti di Windows che hanno cambiato le mie impostazioni IIS. La disattivazione della Pubblicazione WebDAV l'ha risolto di nuovo.
ElliotSchmelliot

0

È possibile risolverlo modificando il tipo "ExtensionlessUrlHandler-Integrated-4.0" in IIS in System.Web.DefaultHttpHandler


0

Per me, la rimozione di WebDAV dal mio server ha fatto sì che l'applicazione restituisse un 503 Service Unavailablemessaggio di errore durante l'utilizzo PUTo DELETE, quindi l'ho reinstallata di nuovo. Ho anche provato a rimuovere completamente .NET Framework 4.5 e reinstallarlo e ho anche provato a ripetere la registrazione come suggerito, ma senza risultati.

Sono stato in grado di risolvere questo problema disabilitando WebDAV per il singolo pool di applicazioni, questo ha fermato l'errore "modulo danneggiato" durante l'utilizzo di PUTo DELETE.

Disabilita WebDAV per il pool di app individuali:

  1. Fai clic sul pool di applicazioni interessato
  2. Trova WebDAV Authoring Toolsnella lista
  3. Clicca per aprirlo
  4. Fai clic Disable WebDAVin alto a destra.

Ta daaaa!

Ho ancora lasciato gli elementi di rimozione nel mio web.configfile.

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

Questo link è dove ho trovato le istruzioni ma non è molto chiaro.


0

Questa forse non è una soluzione utile per OP ma riguarda lo stesso messaggio di "errore".

Stiamo ospitando pagine PHP su IIS8.5 con .NET 4.5 installato correttamente.

Facciamo uso della funzionalità di precarico per assicurarci che la nostra applicazione sia sempre reattiva su tutta la linea.

Dopo un po 'abbiamo iniziato a ricevere questo errore a caso.

Nel web.config: ho messo skipManagedModules su true, -> non farlo!

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

Sebbene il sito Web sia php, il routing al paging è gestito dai moduli !!!


0

Ho anche riscontrato questo problema. La mia app MVC4 è in esecuzione su un Windows Server 2012 R2 con IIS 8.5. Nessuna di queste soluzioni pubblicate ha funzionato per me ... l'installazione dei framework mancanti tramite le funzionalità IIS avrebbe potuto risolverlo, ma l'installazione ha sempre avuto esito negativo.

Ho dovuto usare Web Platform Installere installato i seguenti pacchetti:

inserisci qui la descrizione dell'immagine


0

Stavo affrontando questo problema in un'applicazione web ospitata su un server di hosting condiviso. Quindi ovviamente non ha avuto accesso diretto a IIS, quindi non è stato possibile applicare molte soluzioni proposte qui.

Sul pannello di controllo del provider di hosting ho abilitato la registrazione degli errori per IIS e ASP.Net. E poi ho saputo che l'errore in realtà si trovava in un cshtml mancante.


0

L'installazione di .NET 4.7 ha funzionato per me. Avevo installato solo 3.5 prima.inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.