Hosting out-of-process con IIS e ASP.NET Core
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere Criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Poiché le app ASP.NET Core vengono eseguite in un processo distinto dal processo di lavoro IIS, il modulo ASP.NET Core esegue la gestione dei processi. Il modulo avvia il processo per l'app ASP.NET Core quando arriva la prima richiesta e riavvia l'app se viene arrestata o si arresta in modo anomalo. Si tratta essenzialmente dello stesso comportamento delle app eseguite in-process e gestite dal servizio Attivazione processo Windows.
Il diagramma seguente illustra la relazione tra IIS, il modulo ASP.NET Core e un'app ospitata out-of-process:
- Le richieste arrivano dal Web al driver HTTP.sys in modalità kernel.
- Il driver instrada le richieste a IIS sulla porta configurata per il sito Web. La porta configurata è in genere 80 (HTTP) o 443 (HTTPS).
- Il modulo inoltra le richieste a Kestrel su una porta casuale per l'app. La porta casuale non è 80 o 443.
Il modulo ASP.NET Core specifica la porta tramite una variabile di ambiente all'avvio. L'estensione UseIISIntegration configura il server per l'ascolto su http://localhost:{PORT}
. Vengono eseguiti controlli aggiuntivi e le richieste che non provengono dal modulo vengono rifiutate. Il modulo non supporta l'inoltro HTTPS. Le richieste vengono inoltrate tramite HTTP anche se ricevute da IIS tramite HTTPS.
Dopo che Kestrel ha prelevato la richiesta dal modulo, la richiesta viene inoltrata alla pipeline middleware di ASP.NET Core. La pipeline middleware gestisce la richiesta e la passa come istanza di HttpContext
alla logica dell'app. Il middleware aggiunto dall'integrazione di IIS aggiorna lo schema, l'IP remoto e la base del percorso per l'account per l'inoltro della richiesta a Kestrel. La risposta dell'app viene quindi passata a IIS, che la inoltra di nuovo al client HTTP che ha avviato la richiesta.
Per indicazioni sulla configurazione del modulo ASP.NET Core, vedere Modulo ASP.NET Core (ANCM) per IIS.
Per altre informazioni sull'hosting, vedere Hosting in ASP.NET Core.
Configurazione dell'applicazione
Abilitare i componenti IISIntegration
Quando si crea un host in CreateHostBuilder
(Program.cs
), chiamare CreateDefaultBuilder per abilitare l'integrazione IIS:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
...
Per altre informazioni su CreateDefaultBuilder
, vedere Host generico .NET in ASP.NET Core.
Modello di hosting out-of-process
Per configurare le opzioni di IIS includere una configurazione del servizio per IISOptions in ConfigureServices. Nell'esempio seguente si impedisce all'app di popolare HttpContext.Connection.ClientCertificate
:
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = false;
});
Opzione | Predefiniti | Impostazione |
---|---|---|
AutomaticAuthentication |
true |
Se true , il middleware di integrazione IIS imposta HttpContext.User autenticato tramite l'autenticazione di Windows. Se false , il middleware fornisce solo un oggetto identity per HttpContext.User e risponde alle sfide quando richiesto in modo esplicito da AuthenticationScheme . Per il funzionamento di AutomaticAuthentication l’autenticazione di Windows deve essere abilitata in IIS. Per altre informazioni, vedere l'argomento Autenticazione di Windows. |
AuthenticationDisplayName |
null |
Imposta il nome visualizzato dagli utenti nelle pagine di accesso. |
ForwardClientCertificate |
true |
Se è true ed è presente l’intestazione della richiesta MS-ASPNETCORE-CLIENTCERT , HttpContext.Connection.ClientCertificate viene popolato. |
Scenari con server proxy e servizi di bilanciamento del carico
Il middleware di integrazione IIS e il modulo ASP.NET Core sono configurati per inoltrare:
- Lo schema (HTTP/HTTPS).
- L'indirizzo IP remoto di origine della richiesta.
Il middleware di integrazione IIS configura il middleware delle intestazioni inoltrate.
Potrebbero essere necessari interventi di configurazione aggiuntivi per le app ospitate dietro ulteriori server proxy e servizi di bilanciamento del carico. Per altre informazioni, vedere Configurare ASP.NET Core per l'utilizzo di server proxy e servizi di bilanciamento del carico.
Modello di hosting out-of-process
Per configurare un'app per l'hosting out-of-process, impostare il valore della <AspNetCoreHostingModel>
proprietà su OutOfProcess
nel file di progetto (.csproj
):
<PropertyGroup>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
L'hosting in-process viene impostato con InProcess
, ovvero il valore predefinito.
Il valore di <AspNetCoreHostingModel>
non fa distinzione tra maiuscole e minuscole, quindi inprocess
sono outofprocess
valori validi.
Kestrel il server viene usato invece del server HTTP IIS (IISHttpServer
).
Per le chiamate UseIISIntegration out-of-process aCreateDefaultBuilder
:
- Configurare la porta e il percorso di base su cui il server deve eseguire l'ascolto in caso di esecuzione dietro il modulo ASP.NET Core.
- Configurare l'host per l'acquisizione degli errori di avvio.
Nome processo
Process.GetCurrentProcess().ProcessName
dichiara w3wp
/iisexpress
(In-Process) o dotnet
(out-of-process).
Molti moduli nativi, ad esempio l'autenticazione di Windows, rimangono attivi. Per altre informazioni sui moduli IIS attivi con il modulo ASP.NET Core, vedere Moduli IIS con ASP.NET Core.
Il modulo ASP.NET Core può anche:
- Impostare variabili di ambiente per il processo di lavoro.
- Registrare output stdout in una risorsa di archiviazione di file per la risoluzione di problemi di avvio.
- Inoltrare token di autenticazione di Windows.