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:

Modulo ASP.NET Core nello scenario di hosting out-of-process

  1. Le richieste arrivano dal Web al driver HTTP.sys in modalità kernel.
  2. Il driver instrada le richieste a IIS sulla porta configurata per il sito Web. La porta configurata è in genere 80 (HTTP) o 443 (HTTPS).
  3. 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.