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.
fuente
Respuestas:
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):
Además, si mira la documentación de MSDN para el espacio de nombres System.Web.Hosting (
SimpleWorkerRequest
está en este espacio de nombres), también verá algo similar a lo anterior (nuevamente, el énfasis es mío):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.
fuente
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):
http://forums.iis.net/p/1190643/2026401.aspx
fuente
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 ...
fuente
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
fuente
Para Windows 10 / Windows Server 2016, use el siguiente comando:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
Las respuestas sugeridas con
aspnet_regiis
no funcionan en Windows 10 (Creators Update y posterior) o Windows Server 2016: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í.
fuente
Ejecute uno de estos comandos:
Para el sistema operativo Windows de 32 bits:
Para el sistema operativo Windows de 64 bits:
fuente
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:
fuente
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
fuente
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.
Busque aspnet_regiis en una carpeta similar a esta ruta. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
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í.
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.
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.
fuente
Asegúrese de haber configurado su
application-site
versión dev2.0
av4.0
en el Administrador IIS :Después de eso, instale su
ASP.NET
.Para SO de 32 bits (Windows):
Para SO de 64 bits (Windows):
Reinicie su
application-site
administrador de IIS y disfrute.fuente
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.
fuente
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
fuente
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.
Gracias a https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI
fuente
Resolví este problema, agregando "Activar o desactivar las características de Windows" La opción ASP.NET 4.7
fuente
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
fuente
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.
fuente
Puede solucionarlo cambiando el tipo "ExtensionlessUrlHandler-Integrated-4.0" en iis a System.Web.DefaultHttpHandler
fuente
Para mí, al eliminar WebDAV de mi servidor, la aplicación devolvió un
503 Service Unavailable
mensaje de error al usarPUT
oDELETE
, 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
PUT
oDELETE
.Deshabilite WebDAV para el grupo de aplicaciones individuales:
WebDAV Authoring Tools
en la listaDisable WebDAV
en la esquina superior derecha.Ta daaaa!
Todavía dejé los elementos eliminados en mi
web.config
archivo.Este enlace es donde encontré las instrucciones, pero no está muy claro.
fuente
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!
Aunque el sitio web es php, el enrutamiento a la paginación es administrado por los módulos.
fuente
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 Installer
e instalé los siguientes paquetes:fuente
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.
fuente
Instalar .NET 4.7 funcionó para mí. Solo tenía 3.5 instalados anteriormente.
fuente