Iniciando o site ASP.NET Core 3.1 no IIS [duplicado]
Não consegui iniciar meu ASP.NET Core 3.1 no IIS (v10) da maneira que esperava. Eu publico no site para pastas normalmente, mas quando eu testo de dentro da minha VM do Windows Server 2019 indo para http: // localhost: 80 ou https: // localhost: 443 (para os quais o site IIS está vinculado), Acabei de receber uma resposta 500.19. MAS se eu entrar na linha de comando, dotnet MyWebApp.dll
o site APARECE em https: // localhost: 5001 /.
O que está acontecendo? Por que a porta 80 não está funcionando automaticamente, visto que está vinculada ao IIS?
Existe algum truque para fazer isso funcionar apenas copiando os arquivos e usando o IIS ou SOU OBRIGADO a usar a linha de comando para iniciar um site .NET Core 3.1?
Respostas
Certifique-se de ter feito o seguinte:
- O pacote de hospedagem Core mais recente instalado. Caso contrário, vá aqui e procure "Pacote de hospedagem"https://dotnet.microsoft.com/download/dotnet-core/3.1 (você deve ir lá regularmente, uma nova versão a cada mês, a mais recente é 3.1.7 ao escrever isto)
- No pool de aplicativos, certifique-se de que o .NET Framework não esteja selecionado
Ao publicar, use
Deployment Mode = Framework-Dependent
Target Runtime = win-x64
Em seu perfil de publicação (você encontra este arquivo na pasta do projeto /Properties/PublishProfiles/YourProfileName.pubxml) depois de salvar o perfil, você precisará
<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
InProcess é a opção mais rápida ao usar o IIS. Ao executar a publicação, isso acabará no seu web.config gerado 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>
Ao implantar em um servidor temporário, crie um novo perfil de publicação e use
<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Ao obter a resposta de https: // localhost: 5001 /, você está executando o Kestrel, não o IIS
Parece que você esqueceu de instalar o pacote de hospedagem na web Asp.net Core. O núcleo Asp.net não é compatível com o IIS por padrão, mesmo você pode executá-lo no Visual studio IIS express. Além disso, o IIS não registrará o manipulador AspNetCore, mesmo quando você instalar o pacote de hospedagem web asp.net core.
Portanto, certifique-se de ter registrado o manipulador e o módulo principal do asp.net em 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>
Claro, você pode publicar seu aplicativo com a ferramenta de implantação da web do VS. Ele registrará essas configurações quando você publicar o projeto.
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1