Inicio del sitio ASP.NET Core 3.1 en IIS [duplicado]

Aug 17 2020

No he podido iniciar mi ASP.NET Core 3.1 en IIS (v10) de la forma que esperaba. Publico en el sitio en carpetas como de costumbre, pero cuando pruebo desde mi máquina virtual Windows Server 2019 yendo a http: // localhost: 80 o https: // localhost: 443 (a los cuales está vinculado el sitio de IIS), Acabo de recibir una respuesta de 500,19. PERO si desde la línea de comando entro dotnet MyWebApp.dll, entonces el sitio SI aparece en https: // localhost: 5001 /.

¿Que esta pasando? ¿Por qué el puerto 80 no funciona automáticamente, dado que está vinculado allí en IIS?

¿Existe algún truco para hacer que esto funcione simplemente copiando los archivos y usando IIS, o estoy OBLIGADO a usar la línea de comandos para iniciar un sitio .NET Core 3.1?

Respuestas

1 RoarS. Aug 18 2020 at 09:57

Asegúrate de haber hecho lo siguiente:

  • Se instaló el último paquete de alojamiento Core. Si no es así, vaya aquí y busque "Paquete de alojamiento"https://dotnet.microsoft.com/download/dotnet-core/3.1 (debe ir allí con regularidad, una nueva versión cada mes, la última es la 3.1.7 al escribir esto)
  • En el grupo de aplicaciones, asegúrese de que .NET framework no esté seleccionado

Cuando publique, use

Deployment Mode = Framework-Dependent
Target Runtime = win-x64

En su perfil de publicación (encontrará este archivo en la carpeta del proyecto /Properties/PublishProfiles/YourProfileName.pubxml) después de guardar el perfil, necesitará

<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

InProcess es la opción más rápida cuando se usa IIS. Al ejecutar la publicación, esto terminará en su web.config generado como este

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\YourWebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

Al implementar en un servidor provisional, cree un nuevo perfil de publicación y utilice

<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

Cuando obtiene la respuesta de https: // localhost: 5001 / está ejecutando Kestrel, no IIS

JokiesDing Aug 18 2020 at 06:30

Parece que no pudo instalar el paquete de alojamiento web Asp.net Core. El núcleo de Asp.net no es compatible con IIS de forma predeterminada, incluso puede ejecutarlo en Visual Studio IIS express. Además, IIS no registrará el controlador AspNetCore incluso cuando instale el paquete de alojamiento web principal de asp.net.

Por lo tanto, asegúrese de haber registrado el controlador y el módulo principal de asp.net en web.config

<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\MyWebApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>

Por supuesto, puede publicar su aplicación con la herramienta de implementación web VS. Registrará esta configuración cuando publique el proyecto.

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1