El controlador "ExtensionlessUrlHandler-Integrated-4.0" tiene un módulo incorrecto "ManagedPipelineHandler" en su lista de módulos

252

Para ser honesto, traté de hacer un truco sucio en IIS y justo cuando pensaba que iba a salirse con la suya, me di cuenta de que mi solución no funciona. Esto es lo que he intentado hacer:

1) Tengo una aplicación ASP.NET que tiene una clase Preloader que hereda IProcessHostPreloadClient y realiza toda la inicialización pesada en la implementación del método Preload (la aplicación es compleja y es parte de un sistema enorme, por lo que requiere aproximadamente 2 minutos para establecer conexiones a todo lo necesario servicios y pre-instanciar algunos registros de Unity).

2) Tengo mucho trabajo que hacer en el cierre de la aplicación (cancelar la suscripción, desconectar, eliminar, ...), y creo que el mejor lugar para hacerlo es en el método * Application_End * ubicado en Global.asax .

3) Todo funciona bien cuando tengo actividad de usuario (la primera solicitud después de que se inicie el grupo de aplicaciones que contiene la aplicación web mencionada anteriormente hará que se llame a * Application_Start * y luego * Application_End * se llame al detener o reciclar el grupo de aplicaciones), pero los problemas se produce cuando no hay actividad del usuario y la aplicación intenta reiniciarse después de estar activa durante 48 horas (requisito configurado). Como no hubo solicitudes, la aplicación oficialmente no comenzó. Ergo, no se puede detener con gracia ya que no se llamará * Application_End *.

4) Ahora viene la parte desordenada ... He intentado hacer una solicitud GET desde el código al final del método de Precarga , y funcionó. Pero esta solución me pareció mala, aunque funcionó. Entonces, probé muchas cosas, y lo último que probé fue esto:

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

... y eso ha hecho su propósito. Se llamó a * Application_Start * (verifiqué la respuesta, contenía una página de inicio de sesión que se suponía que debía mostrarse en la solicitud inicial) y en el cierre del grupo de aplicaciones, la aplicación finalizó correctamente haciendo el trabajo necesario en * Application_End *.

PERO

Después de que la aplicación se inició (precargó e inició) de esta manera, esto es lo que sucedió cuando quería acceder a la aplicación a través del navegador web:

Error HTTP 500.21: el controlador interno de errores del servidor "ExtensionlessUrlHandler-Integrated-4.0" tiene un módulo incorrecto "ManagedPipelineHandler" en su lista de módulos

No puedo resolver esto. ¿Alguien puede decirme por qué sucede esto y cómo solucionarlo?

Si no lo resuelvo, volveré a la primera solución (enviar una solicitud GET desde el código), pero este problema me molestará ya que ni siquiera tengo una idea de lo que está mal.

Ivan Peric
fuente
¿Qué versión de IIS estás usando?
chue x
IIS 7.5 (7.5.7600.16385)
Ivan Peric
No es una respuesta directa a su pregunta, pero para otros usuarios con problemas similares y suponiendo que tiene una aplicación con conexión a Internet: puede usar un servicio externo como uptimerobot.com para tocar su aplicación cada X cantidad de tiempo. Mantiene su aplicación en estado de ejecución + tiene los beneficios adicionales del servicio (tiempo de actividad, alertas, etc.).
qbantek
@qbantek Aunque la aplicación en la que estoy trabajando no tiene conexión a Internet, me diste una buena idea. Podría usar el equilibrador de carga para hacer un toque periódico estableciendo el tipo de comprobación del estado de salud en Simple HTTP GET. Gracias
Ivan Peric

Respuestas:

24

El problema

Está utilizando SimpleWorkerRequest en un escenario para el que no fue diseñado. Lo está utilizando dentro de IIS . Si nos fijamos en el enlace anterior de MSDN (el énfasis es mío):

Proporciona una implementación simple de la clase abstracta HttpWorkerRequest que se puede usar para alojar aplicaciones ASP.NET fuera de una aplicación de Internet Information Services (IIS) . Puede emplear SimpleWorkerRequest directamente o extenderlo.

Además, si mira la documentación de MSDN para el espacio de nombres System.Web.Hosting ( SimpleWorkerRequestestá en este espacio de nombres), también verá algo similar a lo anterior (nuevamente, el énfasis es mío):

El espacio de nombres System.Web.Hosting proporciona la funcionalidad para alojar aplicaciones ASP.NET desde aplicaciones administradas fuera de los Servicios de Internet Information Server (IIS) de Microsoft .

La solución

Recomendaría eliminar la llamada a SimpleWorkerRequest. En su lugar, puede usar una solución de Microsoft para asegurarse de que su sitio web se inicie automáticamente después de reciclarlo. Lo que necesita es el Módulo de inicialización de aplicaciones de Microsoft para IIS 7.5 . No es complicado de configurar, pero debe comprender las opciones exactas. Es por eso que también recomendaría la IU de inicialización de aplicaciones para IIS 7.5 . La interfaz de usuario está escrita por un blogger de MSDN.

Entonces, ¿qué hace exactamente la solución de Microsoft? Hace lo que intenta hacer: IIS envía una solicitud de "obtención" a su sitio web una vez que se inicia el grupo de aplicaciones.

chue x
fuente
2
Estaba esperando encontrar una solución que se pueda implementar en el código, pero esto es lo más parecido a un "lo suficientemente bueno" como es posible, así que le otorgo la recompensa. Pero supongo que la solución que proporcionó @danijelk será más útil para la mayoría de las personas que se encuentran con esta pregunta por razones distintas a las que especifiqué. Así que esta es una nota para que le echen un vistazo.
Ivan Peric
650

Intente volver a registrar ASP.NET con aspnet_regiis -i. Funcionó para mi.

Una ruta probable para .NET 4 (desde el símbolo del sistema elevado):

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

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

danijelk
fuente
Gracias por su respuesta. Ya lo intenté y no funcionó. :( -
Osama khodrog
8
No funciona para Windows Server 2012. Lea la publicación de Zach en esta página.
Ivan Akcheurov
Gracias. Me funcionó haciendo esto en una máquina virtual en Azure. Sin embargo, lo que me gustaría saber es por qué tendría que hacer esto en una nueva instalación. Seguramente ASPNET se registra cuando se instala, ¿verdad? Supongo que tiene algo que ver con el orden de instalación.
David Bridge
44
Si está utilizando .NET 4.5.xo 4.6.x, no se deje engañar por la respuesta que menciona 4.0 y piensa que no se aplica a usted. Este problema puede estar relacionado con el orden de instalación de .NET antes de IIS, como lo fue para mí. La ejecución del comando (en mi caso, la versión de 64 bits) lo reparó a pesar de que mi aplicación usa .NET 4.5.2.
Coxy
Windows 2008, la nueva instalación del servidor de AWS me obligó a ejecutar este comando ... Solo para aquellos de nosotros que piensan que no es relevante para su sistema.
Terary
170

Si se encuentra con este error con Windows 8 / Windows Server 2012 y .Net 4.5, siga estas instrucciones aquí: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Vaya a "activar o desactivar las características de Windows", luego Servicios de información de Internet, Servicios de World Wide Web, Características de desarrollo de aplicaciones y luego habilitar ASP.NET 4.5

Esto funcionó para mí (aunque el asistente y la redacción son un poco diferentes en Windows Server 2012, pero lo resolverá). Dicho esto, por qué esto es necesario después de instalar todo a través del Instalador de plataforma web, incluidas todas las dependencias, me supera por completo ...

Zach
fuente
3
Configurar Windows Server es un PITA. ¿Por qué no hay un sistema central de gestión de paquetes?
Kugel
si ha instalado IIS con plataforma web, cheque por el comentario de Virgo139, se resolvió mi problema fácilmente
castors33
Esta fue la solución para mí en Windows 10 Pro build 1607, ¡salud!
Apogee
Esto también me lo arregló en Windows 10. Vale la pena señalar que la corrección de línea de comandos común (aspnet_regiis.exe -i) no está permitida en Windows 10.
Nat Webb
Solución confirmada para Windows 10 Pro.
Zoomzoom
59

A pesar de seguir la mayoría de los consejos en esta página, todavía tenía problemas con Windows Server 2012. La instalación de .NET Extensibility 4.5 lo resolvió por mí:

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

Jonathan
fuente
2
Gracias por explicarlo, estuve mirando Web Server -> Web Server -> Web Server pipe durante demasiado tiempo ... :)
Gleno
2
No olvide comprobar Roles y características> Roles del servidor> Servidor web (IIS)> Servidor web> Desarrollo de aplicaciones> ASP.NET 4.6 (o 4.5 según su configuración)
Lionet Chen el
1
Sí, luego reinicie el Servicio IIS. ¡Trabajó para mi! Gracias. +1
Clavo oxidado
47

Para Windows 10 / Windows Server 2016, use el siguiente comando:

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

Las respuestas sugeridas con aspnet_regiisno funcionan en Windows 10 (Creators Update y posterior) o Windows Server 2016:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS versión 4.0.30319.0
Utilidad de administración para instalar y desinstalar ASP.NET en la máquina local.
Derechos de autor (C) Microsoft Corporation. Todos los derechos reservados.
Comience a instalar ASP.NET (4.0.30319.0).
Esta opción no es compatible con esta versión del sistema operativo. En su lugar, los administradores deben instalar / desinstalar ASP.NET 4.5 con IIS8 utilizando el cuadro de diálogo "Activar / desactivar características de Windows", la herramienta de administración del Administrador del servidor o la herramienta de línea de comandos dism.exe. Para obtener más detalles, consulte http://go.microsoft.com/fwlink/?LinkID=216771 .
Terminó de instalar ASP.NET (4.0.30319.0).

Curiosamente, el cuadro de diálogo "Activar / desactivar características de Windows" no me permitió desmarcar .NET ni ASP.NET 4.6, y solo funcionó el comando DISM anterior. No está seguro de si el featurename es correcta, pero funcionó para mí.

Bart Verkoeijen
fuente
Esto me lo arregló, estaba ejecutando Windows 10 pro con la actualización del creador. ¡Gracias!
Samuel Poirier
Respuesta legendaria! Tuve que reconstruir mi servidor web, y no había actualizado los scripts en unos años, agregué este comando DISM a mis scripts de aprovisionamiento de VM, funciona de maravilla.
Chris Schaller
dism / online / enable-feature / featurename: IIS-ASPNET45 / all Trabajó para mí en Windows Server 2016
Syed Nasir Abbas
¡Gracias a ti, todavía tengo trabajo! :) Trabajó.
Scott,
42

Ejecute uno de estos comandos:

Para el sistema operativo Windows de 32 bits:

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

Para el sistema operativo Windows de 64 bits:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
usuario3896335
fuente
Me di cuenta de que al hacer esto, la carpeta "aspnet_client" se agrega al sitio web en el directorio de Sitios de IIS Connections
eaglei22
26

Este https://stackoverflow.com/a/13266763/1277458 funciona perfectamente. Pero si tiene un sistema operativo de 64 bits, use Framework64 en lugar de Framework en la ruta:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
Neshta
fuente
FWIW, Server 2012 R2 dice que esta opción no es compatible, y sugiere usar el cuadro de diálogo Característica para habilitar ASP.NET 4.5
bvj
Sí, la respuesta de Zach cubre esto.
Neshta
13

En mi caso (Windows 10 + IIS 10) tuve que abrir " Activar o desactivar las características de Windows " y luego ir a Internet Information Services> World Wide Web Services> Características de desarrollo de aplicaciones> y verificar ASP.NET 4.6

Xaris Fytrakis
fuente
1
El mío fue IIS en Windows 2012 R2. Se agregó el ASP.NET compatible en el Administrador del servidor> Administrar> Agregar roles y características> Instalación basada en roles o características> (seleccione su servidor)> Servidor web (IIS)> Servidor web> Desarrollo de aplicaciones> ASP.NET 4.5. Como dijo @ArsmanAhmad, una buena comprobación de cordura es verificar si la versión de CLR de .NET de App Pool está configurada en v4.0.
GBU
6

Haciendo de esta su propia publicación porque esto me tenía yendo por horas.

Vi tal vez una docena de publicaciones similares aquí y en otros lugares sobre este problema y la solución aspnet_regiis. No estaban funcionando para mí, y aspnet_regiis estaba actuando de manera extraña, solo enumerando opciones, etc.

Como el usuario ryan-anderson indicó anteriormente, no puede ingresar .exe

Para aquellos menos cómodos con cosas fuera de IIS en el servidor, esto es lo que debe hacer en pasos simples.

  1. Busque aspnet_regiis en una carpeta similar a esta ruta. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. Haga clic con el botón derecho en el símbolo del sistema en el menú de inicio o donde sea y dígale que se ejecute como administrador. Usar la función "Ejecutar" de Windows simplemente no funcionará, o no funcionó para mí.

  3. Regrese al ejecutable aspnet_regiis. Haga clic y arrástrelo directamente al símbolo del sistema o copie y pegue la dirección en el símbolo del sistema.

  4. Elimine, si está allí, el .exe al final. Esta es la clave. Agregue el -i (espacio menos ojo) al final. Entrar.

Si hizo esto correctamente, verá que comienza a instalar asp.net, y luego le dice que tuvo éxito.

shubniggurath
fuente
Funcionó perfectamente para mí. Gracias.
Mike
5

Asegúrese de haber configurado su application-siteversión de v2.0a v4.0en el Administrador IIS :

Grupos de aplicaciones> Su aplicación> Configuración avanzada> .NET Framework Version

Después de eso, instale su ASP.NET.

Para SO de 32 bits (Windows):

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

Para SO de 64 bits (Windows):

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

Reinicie su application-siteadministrador de IIS y disfrute.

Arsman Ahmad
fuente
Sí, hice mi mejor esfuerzo para hacer la respuesta más simple. ;-) @yuyangJian
Arsman Ahmad
4

Sé que esto es antiguo, pero pensé que podría agregar algo de valor. Para aquellos de nosotros que ejecutamos Server Core fuera de un dominio (los miembros del dominio pueden ejecutar Server Manager de forma remota para agregar / eliminar funciones / roles), debe recurrir a las líneas de comando.

Los usuarios de Powershell pueden escribir "Install-WindowsFeature Web-Asp-Net45"

Eso debería ser equivalente a usar el administrador del servidor.

jwdaigle
fuente
4

Fui desafiado por el mismo mensaje de error, con .net 4.7 instalado.

La solución fue seguir una publicación mencionada anteriormente para ir con "Activar o desactivar la función de Windows", donde ".NET Framework 4.7 Advanced Services" -> "ASP.NET 4.7" ya estaba marcado.

Más abajo en la lista, están los "Servicios de información de Internet" y la subtítulo "Características de desarrollo de aplicaciones" -> "ASP.NET 4.7", que también deben verificarse.

Al habilitar esto, se habilitan muchas otras funciones ... Simplemente presioné el botón Aceptar y el problema se resolvió. Volcado de pantalla del cuadro de diálogo de características de Windows

theodor.johannesen
fuente
Debo agregar que esta fue una edición pro de Windows 10
theodor.johannesen
2

Estoy trabajando en Windows Server 2012. La función .NET Extensibility 4.5 está activada. WebDAVModule eliminado. Todavía recibía el error 500.21 en la ruta ASP / NET '/ docs'.

Cambiar 'skipManagedModules' a falso solucionó el problema.

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

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

shemanov
fuente
2

Resolví este problema, agregando "Activar o desactivar las características de Windows" La opción ASP.NET 4.7

ingrese la descripción de la imagen aquí

Edgar Chivichon
fuente
1

Tuve este problema y descubrí que eliminar la siguiente carpeta ayudó, incluso con la edición que no es Express. Express:

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

Thomas Bratt
fuente
1

Este error comenzó a sucederme de la nada la semana pasada, afectando los sitios web existentes en mi máquina. No tuve suerte con probar cualquiera de las sugerencias aquí. Finalmente, eliminé WebDAV de IIS por completo (Funciones de Windows -> Servicios de información de Internet -> Servicios de World Wide Web -> Funciones HTTP comunes -> Publicación de WebDAV). Realicé un reinicio de IIS después de esto por si acaso, y mi error finalmente se resolvió.

Solo puedo adivinar que una actualización de Windows inició el problema, pero no puedo estar seguro.

pirsqua
fuente
Solo tuve el mismo problema. Instalé algunas actualizaciones de Windows que cambiaron mi configuración de IIS. Desactivar WebDAV Publishing lo solucionó nuevamente.
ElliotSchmelliot
0

Puede solucionarlo cambiando el tipo "ExtensionlessUrlHandler-Integrated-4.0" en iis a System.Web.DefaultHttpHandler

usuario3661608
fuente
0

Para mí, al eliminar WebDAV de mi servidor, la aplicación devolvió un 503 Service Unavailablemensaje de error al usar PUTo DELETE, por lo que lo reinstalé nuevamente. También intenté eliminar por completo .NET Framework 4.5 y reinstalarlo, y también intenté volver a registrarme como se sugirió, pero fue en vano.

Pude solucionar esto deshabilitando WebDAV para el grupo de aplicaciones individual , esto detuvo el error de 'módulo defectuoso' al usar PUTo DELETE.

Deshabilite WebDAV para el grupo de aplicaciones individuales:

  1. Haga clic en el grupo de aplicaciones afectado
  2. Encuentra WebDAV Authoring Toolsen la lista
  3. Haga clic para abrirlo
  4. Haz clic Disable WebDAVen la esquina superior derecha.

Ta daaaa!

Todavía dejé los elementos eliminados en mi web.configarchivo.

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

Este enlace es donde encontré las instrucciones, pero no está muy claro.

Luke
fuente
0

Quizás esta no sea una solución útil para OP, pero se refiere al mismo mensaje de "error".

Estamos alojando páginas PHP en IIS8.5 con .NET 4.5 instalado correctamente.

Hacemos uso de la funcionalidad de precarga para asegurarnos de que nuestra aplicación siempre responda en todos los ámbitos.

Después de un tiempo comenzamos a recibir este error al azar.

En web.config: pongo skipManagedModules en verdadero, -> ¡no hagas esto!

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

Aunque el sitio web es php, el enrutamiento a la paginación es administrado por los módulos.

Schwarzie2478
fuente
0

También me encontré con ese problema. Mi aplicación MVC4 se ejecuta en un Windows Server 2012 R2 con IIS 8.5. Ninguna de estas soluciones publicadas funcionó para mí ... la instalación de los marcos faltantes a través de las características de IIS podría haberlo resuelto, pero la instalación siempre fallaba.

Tuve que usar Web Platform Installere instalé los siguientes paquetes:

ingrese la descripción de la imagen aquí

Franco
fuente
0

Estaba enfrentando este problema en una aplicación web alojada en un servidor de alojamiento compartido. Entonces, obviamente, no tenía acceso directo a IIS, por lo que no podía aplicar muchas soluciones propuestas aquí.

En el panel de control del proveedor de alojamiento, habilité el registro de errores para IIS y ASP.Net. Y luego llegué a saber que el error realmente mentía en un cshtml faltante.

Dipendu Paul
fuente
0

Instalar .NET 4.7 funcionó para mí. Solo tenía 3.5 instalados anteriormente.ingrese la descripción de la imagen aquí

Eric S.
fuente