Pubblicare un applicazione ASP.NET Core 2.0 su IIS
La pubblicazione di un'applicazione ASP.NET Core su IIS è differente rispetto alle applicazioni .NET standard.
Le applicazioni ASP.NET Core hanno un web server integrato chiamato Kestrel e possono essere eseguite anche senza IIS.
IIS è utile nel caso si ha la necessità di installare più applicazioni core sulla stessa porta, ad esempio sulla porta 80 dove ogni applicazione ha un diverso host header, oppure quando si ha la necessità di intallare un certificato https.
In questo caso IIS si comporta come un reverse proxy che gira le chiamate all'applicazione ASP.NET Core al web server Kestrel che rimane in ascolto su una porta locale (variabile ambiente %ASPNETCORE_PORT%) assegnata al primo avvio.
Per utilizzare ASP.NET Core su IIS è necessario installare .Net Core Windows Server Hosting
Dopo l'installazione eseguire un iisreset.
Se tutto è andato a buon fine in IIS è presente il modulo AspNetCoreModule
A questo punto è possibile creare il sito su IIS
Il passo successivo è pubblicare il sito, ad esempio con Visual Studio 2017, nella cartella configurata in IIS
il contenuto della cartella sarà simile a questo
In questo caso IIS si occupa di eseguire l'applicazione ASP.NET Core (dotnet.exe) alla prima chiamata e di riavviare l'applicazione in caso di errore.
Nel file web.config si trova la configurazione di quale processo lanciare (parametro processPath) e quale applicazione (arguments):
Vedi anche ASP.NET Core Module, ASP.NET Core Module configuration reference e .NET All Downloads
Le applicazioni ASP.NET Core hanno un web server integrato chiamato Kestrel e possono essere eseguite anche senza IIS.
IIS è utile nel caso si ha la necessità di installare più applicazioni core sulla stessa porta, ad esempio sulla porta 80 dove ogni applicazione ha un diverso host header, oppure quando si ha la necessità di intallare un certificato https.
In questo caso IIS si comporta come un reverse proxy che gira le chiamate all'applicazione ASP.NET Core al web server Kestrel che rimane in ascolto su una porta locale (variabile ambiente %ASPNETCORE_PORT%) assegnata al primo avvio.
Per utilizzare ASP.NET Core su IIS è necessario installare .Net Core Windows Server Hosting
Dopo l'installazione eseguire un iisreset.
Se tutto è andato a buon fine in IIS è presente il modulo AspNetCoreModule
A questo punto è possibile creare il sito su IIS
in questo esempio non ho utilizzato l'host name ma la porta 3210 su localhost
Dopo la creazione del sito è necessario configurare l'application pool come No Managed codePer il funzionamento di ASP.NET Core è importante impostare la proprietà .NET CLR version su No Managed code
Il passo successivo è pubblicare il sito, ad esempio con Visual Studio 2017, nella cartella configurata in IIS
il contenuto della cartella sarà simile a questo
In questo caso IIS si occupa di eseguire l'applicazione ASP.NET Core (dotnet.exe) alla prima chiamata e di riavviare l'applicazione in caso di errore.
Nel file web.config si trova la configurazione di quale processo lanciare (parametro processPath) e quale applicazione (arguments):
XML
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore"
path="*"
verb="*"
modules="AspNetCoreModule"
resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\WebApplication1.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
forwardWindowsAuthToken="true" />
</system.webServer>
</configuration>
<!--ProjectGuid: e47e5e80-07d3-45d0-94b6-3e2178c51228-->
Vedi anche ASP.NET Core Module, ASP.NET Core Module configuration reference e .NET All Downloads