Avvio del sito ASP.NET Core 3.1 in IIS [duplicato]
Non sono stato in grado di avviare ASP.NET Core 3.1 in IIS (v10) nel modo previsto. Pubblico sul sito in cartelle come di consueto, ma quando eseguo il test dalla mia VM di Windows Server 2019 andando su http: // localhost: 80 o https: // localhost: 443 (a entrambi i quali è associato il sito IIS), Ricevo solo una risposta 500.19. MA se dalla riga di comando, dotnet MyWebApp.dll
entro, il sito appare su https: // localhost: 5001 /.
Cosa sta succedendo? Perché la porta 80 non funziona automaticamente, dato che è collegata lì in IIS?
C'è qualche trucco per farlo funzionare semplicemente copiando i file e utilizzando IIS, o mi è NECESSARIO utilizzare la riga di comando per avviare un sito .NET Core 3.1?
Risposte
Assicurati di aver fatto quanto segue:
- Pacchetto di hosting Core più recente installato. In caso contrario, vai qui e cerca "Hosting Bundle"https://dotnet.microsoft.com/download/dotnet-core/3.1 (dovresti andarci regolarmente, una nuova versione circa ogni mese, l'ultima è la 3.1.7 quando scrivi questo)
- Nel pool di app, assicurati che .NET Framework non sia selezionato
Quando pubblichi, usa
Deployment Mode = Framework-Dependent
Target Runtime = win-x64
Nel tuo profilo di pubblicazione (trovi questo file nella cartella del progetto /Properties/PublishProfiles/YourProfileName.pubxml) dopo aver salvato il profilo, avrai bisogno
<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
InProcess è l'opzione più veloce quando si utilizza IIS. Quando esegui la pubblicazione, questo finirà nel tuo web.config generato in questo modo
<?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>
Quando si esegue la distribuzione su un server di gestione temporanea, creare un nuovo profilo di pubblicazione e utilizzare
<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
Quando ricevi una risposta da https: // localhost: 5001 / stai eseguendo Kestrel, non IIS
Sembra che ti sei perso l'installazione del pacchetto di hosting Web Asp.net Core. Asp.net core non è supportato da IIS per impostazione predefinita, anche se è possibile eseguirlo in Visual studio IIS express. Inoltre, IIS non registrerà il gestore AspNetCore anche quando installi il pacchetto di hosting web asp.net core.
Quindi assicurati di aver registrato il gestore e il modulo principale asp.net in 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>
Naturalmente, puoi pubblicare la tua applicazione con lo strumento di distribuzione Web VS. Registrerà queste configurazioni quando pubblichi il progetto.
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1