Tengo una aplicación ASP.NET Core que funciona muy bien en IIS Express. Del mismo modo, si ejecuto la aplicación desde la línea de comandos a través de dotnet run
, todo funciona sin problemas:
C:\Code\Sandbox\IisTestApp\IisTestApp>dotnet run Using launch settings from C:\Code\Sandbox\IisTestApp\IisTestApp\Properties\launchSettings.json... Hosting environment: Production Content root path: C:\Code\Sandbox\IisTestApp\IisTestApp Now listening on: http://localhost:5000 Now listening on: https://localhost:5001 Application started. Press Ctrl+C to shut down.
Si trato de apuntar a IIS local, aparece el siguiente error:
No se puede iniciar el proceso C:\Program Files\dotnet\dotnet.exe. La solicitud del servidor web falló con el código de estado 500, Error interno del servidor. La respuesta completa se escribió en C:\Users{mi nombre de usuario}\AppData\Local\Temp\HttpFailure_08-05-50.html.
El archivo HTML contiene esta información:
Error HTTP 500.19 - Error interno del servidor
No se puede acceder a la página solicitada porque los datos de configuración relacionados con la página no son válidos.
Información detallada del error:
Módulo IIS Web Core
Solicitud de inicio de notificación
Manejador Aún no determinado
Código de error 0x8007000d
Error de configuración
Archivo de configuración \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
URL solicitada http://localhost:80/IisTestApp
Ruta física C:\Code\Sandbox\IisTestApp\IisTestApp
Método de inicio de sesión Aún no determinado
Usuario de inicio de sesión Aún no determinado
Nota: en caso de que no sea obvio a partir de ese mensaje, esta es una reproducción mínima de mi problema, no de la aplicación real.
La mayor parte de lo que veo en línea dice que el código de error 0x8007000d
indica que no tengo el componente .NET Core Windows Server Hosting ( AspNetCoreModule
), pero definitivamente lo he instalado:
También puedo verlo en la página principal de "Módulos" de IIS y verifiqué que el archivo al que apunta realmente existe:
Extrañamente, si trato de ir a la página de Módulos para este sitio específico, obtengo el mismo mensaje de error que la página web:
Hubo un error al realizar esta operación.
Detalles:
Nombre de archivo: \?\C:\Code\Sandbox\IisTestApp\IisTestApp\web.config
Error:
Esta versión del módulo de alojamiento (2.1.8) coincide en general con lo que tengo instalado:
C:\Users\{my user name}>dotnet --list-sdks 2.1.202 [C:\Program Files\dotnet\sdk] 2.1.504 [C:\Program Files\dotnet\sdk] C:\Users\{my user name}>dotnet --list-runtimes Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All] Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All] Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Y a qué se dirige mi aplicación de prueba:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" /> </ItemGroup> </Project>
A pesar de todo eso, creo que el problema realmente está relacionado con IIS y ese componente de alojamiento. Aquí está el web.config (muy predeterminado) que se genera con la plantilla del proyecto:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false"> <environmentVariables /> </aspNetCore> </system.webServer> </location> </configuration>
Nota: sigo recibiendo el mismo mensaje de error si codifico la ruta completa en processPath o uso .\
ruta relativa
Si elimino el nodo <aspNetCore>
, obtengo un error diferente:
Error HTTP 502.3: puerta de enlace incorrecta
Hubo un error de conexión al intentar enrutar la solicitud.
Información detallada del error:
Módulo AspNetCoreModule
Notificación ExecuteRequestHandler
Controlador aspNetCore
Código de error 0x80070490
URL solicitada http://localhost:80/IisTestApp
Ruta física C:\Code\Sandbox\IisTestApp\IisTestApp
Método de inicio de sesión anónimo
Usuario de inicio de sesión anónimo
El punto es que AspNetCoreModule
arroja el error esta vez, por lo que se está cargando y ejecutando algún código.
Publicar en una carpeta separada y configurar manualmente el sitio en IIS (en lugar de confiar en el comportamiento predeterminado de Visual Studio de crear un sitio web de IIS apuntado a la carpeta "bin") da como resultado el mismo mensaje de error, aunque obtengo un aspNetCore
ligeramente diferente nodo en el archivo web.config generado:
<aspNetCore processPath="dotnet" arguments=".\IisTestApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"> <environmentVariables /> </aspNetCore>
¿Qué está causando que IIS no pueda ejecutar esta aplicación?
Intenté volver a instalar .NET Core (SDK, tiempo de ejecución y componente de alojamiento), pero no funcionó.
También noté varias publicaciones que mencionan que la instalación del módulo de reescritura de URL para IIS corrige este error (en particular, esto: HTTP Error 500.19 - IIS 7.5 Error 0x8007000d ). Mi web.config no menciona ese módulo, pero intenté instalarlo en caso de que AspNetCoreModule lo use debajo de las sábanas. Esto no ayudó en mi situación.
Habiendo descartado todo lo específico de la aplicación que yo (y los muchos comentaristas útiles, especialmente Daboul ) pudimos pensar, y habiendo revisado la configuración visible de IIS, recurrí a mirar el archivo de configuración principal para IIS en su conjunto: applicationHost.config
Según Introducción a ApplicationHost.config , este archivo se encuentra en %windir%\system32\inetsrv\config
. Dado que la aplicación real está funcionando en una máquina diferente en mi oficina, las comparé usando un programa diff y descubrí que faltaba el siguiente nodo en mi archivo de configuración:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <configSections> <!-- ...lots of other stuff... --> <sectionGroup name="system.webServer"> <!-- ...lots of other stuff... --> <!--This "section" node for aspNetCore is the one that was missing--> <section name="aspNetCore" overrideModeDefault="Allow" />
Agregar ese nodo resolvió el error.
Por extraño que parezca, se hace referencia al propio AspNetCoreModule varias veces más adelante en el archivo. Dado que no he editado manualmente este archivo antes, parece posible que se tratara de algún tipo de error de instalación al instalar AspNetCoreModule por primera vez.
Intenté usar la sugerencia anterior, pero no funcionó. Entonces, reinstalé Asp Net Core Runtime Hosting en modo administrador y mi ApplicationHost.Config se corrigió.
La instalación de .NET Core Hosting Bundle resolvió el problema (como en la respuesta superior)
En mi caso, la solución fue simple, simplemente restaurar el paquete de alojamiento y ayudó. Antes de restaurar, obtengo hresult 0x8007000d
. En iis para aplicaciones net core, los módulos no se cargaron.
Si instala .NET Core Windows Hosting Bundle , pero AspNetCoreModule aún no aparece en su applicationHost.config
, puede intentar hacer lo que hice para resolver mi problema, después de probar todas las otras soluciones en SO y otros lugares.
Encontré una applicationHost.config
en otro servidor que tenía esas líneas AspNetCoreModule y actualicé el archivo en el servidor roto. No estoy seguro de por qué la instalación de .NET Core no los agregó.
Agregué la siguiente línea en la sección <globalModules>
:
<add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" />
Y este debajo de <modules>
:
<add name="AspNetCoreModule" />
Espero que esto ayude.
En dot core 5.0, resolví este error instalando el paquete de alojamiento 5.0.13
https://dotnet.microsoft.com/en-us/download/dotnet/5.0
web.config
Como puede ver en web.config, utiliza el módulo "AspNetCoreModuleV2" que he marcado en amarillo en la página de descarga.
En mi caso, el mismo error se produjo al instalar dotnet-hosting ANTES de instalar IIS. Ejecutar una reparación en el instalador de alojamiento (después de instalar IIS) me solucionó el problema.
También recibo este error en dotnet core 3.1.
Después de eliminar la sección contenedora de la aplicación web.config, comienza a funcionar:
Cambiado a:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\ContactForm.Microservice.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </configuration>