Démarrage du site ASP.NET Core 3.1 dans IIS [dupliquer]

Aug 17 2020

Je n'ai pas pu démarrer mon ASP.NET Core 3.1 dans IIS (v10) comme je m'y attendais. Je publie sur le site dans des dossiers comme d'habitude, mais lorsque je teste à partir de ma machine virtuelle Windows Server 2019 en accédant à http: // localhost: 80 ou https: // localhost: 443 (aux deux auxquels le site IIS est lié), Je viens de recevoir une réponse 500,19. MAIS si à partir de la ligne de commande, j'entre dotnet MyWebApp.dll, alors le site apparaît à https: // localhost: 5001 /.

Que se passe-t-il? Pourquoi le port 80 ne fonctionne-t-il pas automatiquement, étant donné qu'il y est lié dans IIS?

Existe-t-il une astuce pour que cela fonctionne simplement en copiant les fichiers sur et en utilisant IIS, ou suis-je obligé d'utiliser la ligne de commande pour démarrer un site .NET Core 3.1?

Réponses

1 RoarS. Aug 18 2020 at 09:57

Assurez-vous d'avoir effectué les opérations suivantes:

  • Installation du dernier pack d'hébergement Core. Sinon, allez ici et recherchez "Hosting Bundle"https://dotnet.microsoft.com/download/dotnet-core/3.1 (vous devriez y aller régulièrement, une nouvelle version environ tous les mois, la dernière est la 3.1.7 lorsque vous écrivez ceci)
  • Dans le pool d'applications, assurez-vous que .NET Framework n'est pas sélectionné

Lors de la publication, utilisez

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

Dans votre profil de publication (vous trouvez ce fichier dans le dossier du projet /Properties/PublishProfiles/YourProfileName.pubxml) après avoir enregistré le profil, vous aurez besoin

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

InProcess est l'option la plus rapide lors de l'utilisation d'IIS. Lors de l'exécution de la publication, cela se terminera dans votre web.config généré comme ceci

<?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>

Lors du déploiement sur un serveur intermédiaire, créez un nouveau profil de publication et utilisez

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

Lorsque vous obtenez une réponse de https: // localhost: 5001 / vous exécutez Kestrel, pas IIS

JokiesDing Aug 18 2020 at 06:30

Il semble que vous ayez manqué d'installer le pack d'hébergement Web Asp.net Core. Asp.net core n'est pas pris en charge par IIS par défaut, même si vous pouvez l'exécuter dans Visual studio IIS express. En outre, IIS n'enregistrera pas le gestionnaire AspNetCore même lorsque vous installez le bundle d'hébergement Web principal asp.net.

Veuillez donc vous assurer que vous avez enregistré le gestionnaire et le module principal asp.net dans 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>

Bien entendu, vous pouvez publier votre application avec l'outil de déploiement Web VS. Il enregistrera ces configurations lors de la publication du projet.

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