Host ASP.NET Core in Windows con IISHost ASP.NET Core on Windows with IIS

Di Luke LathamBy Luke Latham

Installare il bundle di hosting .NET CoreInstall the .NET Core Hosting Bundle

Sistemi operativi supportatiSupported operating systems

Sono supportati i sistemi operativi seguenti:The following operating systems are supported:

  • Windows 7 o versione successivaWindows 7 or later
  • Windows Server 2008 R2 o versioni successiveWindows Server 2008 R2 or later

Il server HTTP.sys (chiamato in precedenza WebListener) non funziona in una configurazione proxy inverso con IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. È necessario usare il server Kestrel.Use the Kestrel server.

Per informazioni sull'hosting in Azure, vedere Distribuire le app ASP.NET Core in Servizio app di Azure.For information on hosting in Azure, see Distribuire le app ASP.NET Core in Servizio app di Azure.

Piattaforme supportateSupported platforms

Sono supportate le app pubblicate per la distribuzione a 32 bit (x86) o a 64 bit (x64).Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Distribuire un'app a 32 bit con .NET Core SDK a 32 bit (x86), a meno che l'app:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Non richieda lo spazio indirizzi di memoria virtuale più grande disponibile per un'app a 64 bit.Requires the larger virtual memory address space available to a 64-bit app.
  • Non richieda le dimensioni maggiori dello stack IIS.Requires the larger IIS stack size.
  • Non abbia dipendenze native a 64 bit.Has 64-bit native dependencies.

Usare .NET Core SDK a 64 bit (x64) per pubblicare un'app a 64 bit.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Un runtime a 64 bit deve essere presente nel sistema host.A 64-bit runtime must be present on the host system.

Modelli di hostingHosting models

Modello di hosting in-processIn-process hosting model

Se si usa l'hosting in-process, un'app ASP.NET Core esegue lo stesso processo del processo di lavoro IIS.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. L'hosting in-process offre prestazioni migliori rispetto all'hosting out-of-process perché le richieste non vengono inserite in proxy sulla scheda di loopback, un'interfaccia di rete che restituisce il traffico di rete in uscita allo stesso computer.In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine. Per gestire il processo, IIS usa il servizio Attivazione processo Windows (WAS).IIS handles process management with the Windows Process Activation Service (WAS).

Il modulo ASP.NET Core:The ASP.NET Core Module:

  • Esegue l'inizializzazione dell'app.Performs app initialization.
    • Carica CoreCLR.Loads the CoreCLR.
    • Chiama Program.Main.Calls Program.Main.
  • Gestisce la durata della richiesta nativa di IIS.Handles the lifetime of the IIS native request.

Il modello di hosting In-Process non è supportato per le app ASP.NET Core destinate a .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

Il diagramma seguente illustra la relazione tra IIS, il modulo ASP.NET Core e un'app ospitata in-process:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Modulo ASP.NET Core nello scenario di hosting in-process

Una richiesta arriva dal Web al driver HTTP.sys in modalità kernel.A request arrives from the web to the kernel-mode HTTP.sys driver. Il driver instrada la richiesta nativa IIS sulla porta configurata per il sito Web, in genere 80 (HTTP) o 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Il modulo riceve la richiesta nativa e la trasmette al server HTTP di IIS (IISHttpServer).The module receives the native request and passes it to IIS HTTP Server (IISHttpServer). Il server HTTP di IIS è un'implementazione di server in-process per IIS che converte la richiesta da nativa a gestita.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

Dopo che la richiesta è stata elaborata dal server HTTP di IIS, viene eseguito il push della richiesta nella pipeline middleware ASP.NET Core.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. La pipeline middleware gestisce la richiesta e la passa come istanza di HttpContext alla logica dell'app.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. La risposta dell'app viene restituita a IIS tramite il server HTTP di IIS.The app's response is passed back to IIS through IIS HTTP Server. IIS invia la risposta al client che ha avviato la richiesta.IIS sends the response to the client that initiated the request.

L'hosting in-process è una funzionalità che richiede il consenso esplicito per le app esistenti, mentre i modelli dotnet new usano per impostazione predefinita il modello di hosting in-process per tutti gli scenari IIS e IIS Express.In-process hosting is opt-in for existing apps, but dotnet new templates default to the in-process hosting model for all IIS and IIS Express scenarios.

CreateDefaultBuilder aggiunge un'istanza di IServer chiamando il metodo UseIIS per avviare CoreCLR e ospitare l'app all'interno del processo di lavoro IIS (w3wp.exe o iisexpress.exe).CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). I test delle prestazioni indicano che l'hosting di un'app .NET Core in-process offre una velocità effettiva delle richieste significativamente superiore rispetto all'hosting dell'app out-of-process o all'inoltro delle richieste al server Kestrel.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel server.

Modello di hosting out-of-processOut-of-process hosting model

Poiché le app ASP.NET Core vengono eseguite in un processo distinto dal processo di lavoro IIS, il modulo esegue la gestione dei processi.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. 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.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. Si tratta essenzialmente dello stesso comportamento delle app eseguite in-process e gestite dal servizio Attivazione processo Windows.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

Il diagramma seguente illustra la relazione tra IIS, il modulo ASP.NET Core e un'app ospitata out-of-process:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

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

Le richieste arrivano dal Web al driver HTTP.sys in modalità kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. Il driver instrada le richieste a IIS sulla porta configurata per il sito Web, in genere 80 (HTTP) o 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Il modulo inoltra le richieste a Kestrel su una porta casuale per l'app non corrispondente alla porta 80 o 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Il modulo specifica la porta tramite una variabile di ambiente all'avvio e l'estensione UseIISIntegration configura il server per l'ascolto su http://localhost:{PORT}.The module specifies the port via an environment variable at startup, and the UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. Vengono eseguiti controlli aggiuntivi e le richieste che non provengono dal modulo vengono rifiutate.Additional checks are performed, and requests that don't originate from the module are rejected. Il modulo non supporta l'inoltro HTTPS, pertanto le richieste vengono inoltrate tramite HTTP anche se sono state ricevute da IIS tramite HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Dopo che Kestrel ha prelevato la richiesta dal modulo, viene eseguito il push della richiesta nella pipeline middleware ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. La pipeline middleware gestisce la richiesta e la passa come istanza di HttpContext alla logica dell'app.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Il middleware aggiunto dall'integrazione di IIS aggiorna lo schema, l'IP remoto e il percorso di base all'account per l'inoltro della richiesta a Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. La risposta dell'app viene quindi passata a IIS, che ne esegue di nuovo il push al client HTTP che ha avviato la richiesta.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

ASP.NET Core viene fornito con il server Kestrel, ovvero un server HTTP multipiattaforma predefinito.ASP.NET Core ships with Kestrel server, a default, cross-platform HTTP server.

Quando si usa IIS o IIS Express, l'app viene eseguita in un processo separato dal processo di lavoro IIS (out-of-process) con il server Kestrel.When using IIS or IIS Express, the app runs in a process separate from the IIS worker process (out-of-process) with the Kestrel server.

Poiché le app ASP.NET Core vengono eseguite in un processo distinto dal processo di lavoro IIS, il modulo esegue la gestione dei processi.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. 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.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. Si tratta essenzialmente dello stesso comportamento delle app eseguite in-process e gestite dal servizio Attivazione processo Windows.This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (WAS).

Il diagramma seguente illustra la relazione tra IIS, il modulo ASP.NET Core e un'app ospitata out-of-process:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Modulo ASP.NET Core

Le richieste arrivano dal Web al driver HTTP.sys in modalità kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. Il driver instrada le richieste a IIS sulla porta configurata per il sito Web, in genere 80 (HTTP) o 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Il modulo inoltra le richieste a Kestrel su una porta casuale per l'app non corrispondente alla porta 80 o 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Il modulo specifica la porta tramite una variabile di ambiente all'avvio e il middleware di integrazione IIS configura il server per l'ascolto su http://localhost:{port}.The module specifies the port via an environment variable at startup, and the IIS Integration Middleware configures the server to listen on http://localhost:{port}. Vengono eseguiti controlli aggiuntivi e le richieste che non provengono dal modulo vengono rifiutate.Additional checks are performed, and requests that don't originate from the module are rejected. Il modulo non supporta l'inoltro HTTPS, pertanto le richieste vengono inoltrate tramite HTTP anche se sono state ricevute da IIS tramite HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Dopo che Kestrel ha prelevato la richiesta dal modulo, viene eseguito il push della richiesta nella pipeline middleware ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. La pipeline middleware gestisce la richiesta e la passa come istanza di HttpContext alla logica dell'app.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Il middleware aggiunto dall'integrazione di IIS aggiorna lo schema, l'IP remoto e il percorso di base all'account per l'inoltro della richiesta a Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. La risposta dell'app viene quindi passata a IIS, che ne esegue di nuovo il push al client HTTP che ha avviato la richiesta.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

CreateDefaultBuilder configura il server Kestrel come server Web e abilita l'integrazione di IIS configurando il percorso base e la porta per il modulo ASP.NET Core.CreateDefaultBuilder configures Kestrel server as the web server and enables IIS Integration by configuring the base path and port for the ASP.NET Core Module.

Il modulo ASP.NET Core genera una porta dinamica da assegnare al processo back-end.The ASP.NET Core Module generates a dynamic port to assign to the backend process. CreateDefaultBuilder chiama il metodo UseIISIntegration.CreateDefaultBuilder calls the UseIISIntegration method. UseIISIntegration configura Kestrel per l'ascolto sulla porta dinamica all'indirizzo IP localhost (127.0.0.1).UseIISIntegration configures Kestrel to listen on the dynamic port at the localhost IP address (127.0.0.1). Se la porta dinamica è 1234, Kestrel è in ascolto su 127.0.0.1:1234.If the dynamic port is 1234, Kestrel listens at 127.0.0.1:1234. Questa configurazione sostituisce le altre configurazioni URL fornite da:This configuration replaces other URL configurations provided by:

Le chiamate a UseUrls o all'API Listen di Kestrel non sono necessarie quando si usa il modulo.Calls to UseUrls or Kestrel's Listen API aren't required when using the module. In caso di chiamata di UseUrls o Listen, Kestrel resta in ascolto sulla porta specificata solo quando si esegue l'app senza IIS.If UseUrls or Listen is called, Kestrel listens on the port specified only when running the app without IIS.

Per altre informazioni sui modelli di hosting in-process e out-of-process, vedere Modulo ASP.NET Core e Guida di riferimento per la configurazione del modulo ASP.NET Core.For more information on the in-process and out-of-process hosting models, see ASP.NET Core Module and ASP.NET Core Module configuration reference.

Per indicazioni sulla configurazione del modulo ASP.NET Core, vedere Modulo ASP.NET Core.For ASP.NET Core Module configuration guidance, see Modulo ASP.NET Core.

Per altre informazioni sull'hosting, vedere Hosting in ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Configurazione dell'applicazioneApplication configuration

Abilitare i componenti IISIntegrationEnable the IISIntegration components

Un file Program.cs tipico chiama CreateDefaultBuilder per avviare la configurazione di un host che consenta l'integrazione con IIS:A typical Program.cs calls CreateDefaultBuilder to begin setting up a host that enables integration with IIS:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Opzioni IISIIS options

Modello di hosting in-processIn-process hosting model

Per configurare le opzioni del server IIS includere una configurazione del servizio per IISServerOptions in ConfigureServices.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. L'esempio seguente disabilita AutomaticAuthentication:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
OpzioneOption Impostazione predefinitaDefault ImpostazioneSetting
AutomaticAuthentication true Se true, IIS Server imposta l'utente HttpContext.User autenticato tramite l'autenticazione di Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Se false, il server fornisce solo un'identità per HttpContext.User e risponde alle richieste esplicite di AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Per il funzionamento di AutomaticAuthentication l’autenticazione di Windows deve essere abilitata in IIS.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Per altre informazioni, vedere Autenticazione di Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Imposta il nome visualizzato dagli utenti nelle pagine di accesso.Sets the display name shown to users on login pages.
AllowSynchronousIO false Indica se l'I/O sincrono è consentito per HttpContext.Request e HttpContext.Response.Whether synchronous IO is allowed for the HttpContext.Request and the HttpContext.Response.
MaxRequestBodySize 30000000 Ottiene o imposta la dimensione massima del corpo della richiesta per HttpRequest.Gets or sets the max request body size for the HttpRequest. Notare che IIS stesso include il limite maxAllowedContentLength, che verrà elaborato prima del set MaxRequestBodySize in IISServerOptions.Note that IIS itself has the limit maxAllowedContentLength which will be processed before the MaxRequestBodySize set in the IISServerOptions. La modifica di MaxRequestBodySize non influisce su maxAllowedContentLength.Changing the MaxRequestBodySize won't affect the maxAllowedContentLength. Per aumentare maxAllowedContentLength, aggiungere una voce in web.config per impostare maxAllowedContentLength su un valore superiore.To increase maxAllowedContentLength, add an entry in the web.config to set maxAllowedContentLength to a higher value. Per ulteriori informazioni, vedere Configurazione.For more details, see Configuration.

Modello di hosting out-of-processOut-of-process hosting model

OpzioneOption Impostazione predefinitaDefault ImpostazioneSetting
AutomaticAuthentication true Se true, IIS Server imposta l'utente HttpContext.User autenticato tramite l'autenticazione di Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Se false, il server fornisce solo un'identità per HttpContext.User e risponde alle richieste esplicite di AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Per il funzionamento di AutomaticAuthentication l’autenticazione di Windows deve essere abilitata in IIS.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Per altre informazioni, vedere Autenticazione di Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Imposta il nome visualizzato dagli utenti nelle pagine di accesso.Sets the display name shown to users on login pages.

Modello di hosting out-of-processOut-of-process hosting model

Per configurare le opzioni di IIS includere una configurazione del servizio per IISOptions in ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. Nell'esempio seguente si impedisce all'app di popolare HttpContext.Connection.ClientCertificate:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OpzioneOption Impostazione predefinitaDefault ImpostazioneSetting
AutomaticAuthentication true Se true, il middleware di integrazione IIS imposta HttpContext.User autenticato tramite l'autenticazione di Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Se false, il middleware fornisce solo un'identità per HttpContext.User e risponde solo alle richieste esplicite di AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Per il funzionamento di AutomaticAuthentication l’autenticazione di Windows deve essere abilitata in IIS.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Per altre informazioni, vedere l'argomento Autenticazione di Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Imposta il nome visualizzato dagli utenti nelle pagine di accesso.Sets the display name shown to users on login pages.
ForwardClientCertificate true Se è true ed è presente l’intestazione della richiesta MS-ASPNETCORE-CLIENTCERT, HttpContext.Connection.ClientCertificate viene popolato.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Scenari con server proxy e servizi di bilanciamento del caricoProxy server and load balancer scenarios

Il middleware di integrazione IIS, che consente di configurare il middleware delle intestazioni inoltrate, e il modulo ASP.NET Core sono configurati per inoltrare lo schema (HTTP/HTTPS) e l'indirizzo IP remoto di origine della richiesta.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Potrebbero essere necessari interventi di configurazione aggiuntivi per le app ospitate dietro ulteriori server proxy e servizi di bilanciamento del carico.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Per altre informazioni, vedere Configurare ASP.NET Core per l'utilizzo di server proxy e servizi di bilanciamento del carico.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

File web.configweb.config file

Il file web.config configura il modulo ASP.NET Core.The web.config file configures the ASP.NET Core Module. La creazione, la trasformazione e la pubblicazione del file web.config sono operazioni gestite da una destinazione MSBuild (_TransformWebConfig) quando viene pubblicato il progetto.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Questa destinazione si trova tra le destinazioni Web SDK (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). L'SDK è impostato all'inizio del file di progetto:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Se nel progetto non è presente un file web.config, il file viene creato con un valore processPath e argomenti corretti per la configurazione del modulo ASP.NET Core. Il file viene quindi spostato nell'output pubblicato.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Se nel progetto è presente un file web.config, il file viene trasformato con il valore di processPath e gli argomenti corretti per la configurazione del modulo ASP.NET Core, quindi viene spostato nell'output pubblicato.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. La trasformazione non modifica le impostazioni di configurazione di IIS incluse nel file.The transformation doesn't modify IIS configuration settings in the file.

Il file web.config può fornire ulteriori impostazioni di configurazione di IIS che controllano i moduli IIS attivi.The web.config file may provide additional IIS configuration settings that control active IIS modules. Per informazioni sui moduli IIS in grado di elaborare le richieste con le app di ASP.NET Core, vedere l'argomento Moduli IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Per impedire che Web SDK trasformi il file web.config, usare la proprietà <IsTransformWebConfigDisabled > nel file di progetto:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Quando si disabilita la trasformazione del file in Web SDK, il valore di processPath e gli argomenti devono essere impostati manualmente dallo sviluppatore.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Per altre informazioni, vedere la Guida di riferimento per la configurazione del modulo ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

Posizione del file web.configweb.config file location

Per configurare correttamente il modulo ASP.NET Core, il file web.config deve essere presente nel percorso radice del contenuto (in genere il percorso base dell'app) dell'app distribuita.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Corrisponde al percorso fisico del sito Web fornito a IIS.This is the same location as the website physical path provided to IIS. Il file web.config deve essere presente nella radice dell'app per abilitare la pubblicazione di più app mediante Distribuzione Web.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Nel percorso fisico dell'app sono presenti file riservati, come <assembly>.runtimeconfig.json, <assembly>.xml (commenti in formato documentazione XML) e <assembly>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Quando il file web.config è presente e il sito viene avviato normalmente, IIS non rende disponibili questi file riservati se vengono richiesti.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Se il file web.config non è presente, ha un nome non corretto o non è in grado di configurare il sito per l'avvio normale, IIS potrebbe rendere disponibili pubblicamente i file riservati.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

Il file web.config deve essere sempre presente nella distribuzione, deve essere denominato correttamente ed essere in grado di configurare il sito per l'avvio normale. Non rimuovere mai il file web.config da una distribuzione in ambiente di produzione.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Trasformare web.configTransform web.config

Se è necessario trasformare web.config in fase di pubblicazione (ad esempio, impostare variabili di ambiente in base a configurazione, profilo o ambiente), vedere Trasformare web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Trasformare web.config.

Configurazione di IISIIS configuration

Sistemi operativi Windows ServerWindows Server operating systems

Abilitare il ruolo del server Server Web (IIS) e stabilire i servizi di ruolo.Enable the Web Server (IIS) server role and establish role services.

  1. Usare la procedura guidata Aggiungi ruoli e funzionalità accessibile tramite il menu Gestisci o il collegamento in Server Manager.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. Nel passaggio Ruoli del server selezionare la casella per Server Web (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    Il ruolo Server Web IIS viene selezionato nel passaggio dei ruoli del server Selezionare.

  2. Dopo il passaggio Funzionalità, viene caricato il passaggioServizi ruolo per Server Web (IIS).After the Features step, the Role services step loads for Web Server (IIS). Selezionare i servizi ruolo IIS desiderati o accettare i servizi ruolo predefiniti specificati.Select the IIS role services desired or accept the default role services provided.

    I servizi ruolo predefiniti vengono selezionati nel passaggio Selezionare i servizi ruolo.

    Autenticazione di Windows (facoltativa)Windows Authentication (Optional)
    Per abilitare l'autenticazione di Windows, espandere i nodi seguenti: Server Web > Sicurezza.To enable Windows Authentication, expand the following nodes: Web Server > Security. Selezionare la funzionalità Autenticazione di Windows.Select the Windows Authentication feature. Per altre informazioni, vedere Autenticazione di Windows<windowsAuthentication> e Configurare l'autenticazione Windows.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (facoltativo)WebSockets (Optional)
    WebSockets è supportato con ASP.NET Core 1.1 o versioni successive.WebSockets is supported with ASP.NET Core 1.1 or later. Per abilitare WebSockets, espandere i nodi seguenti: Server Web > Sviluppo applicazioni.To enable WebSockets, expand the following nodes: Web Server > Application Development. Selezionare la funzionalità Protocollo WebSocket.Select the WebSocket Protocol feature. Per altre informazioni, vedere Oggetti WebSocket.For more information, see WebSockets.

  3. Procedere con il passaggio Conferma per installare il ruolo del server web e i servizi.Proceed through the Confirmation step to install the web server role and services. Dopo l'installazione del ruolo Server Web (IIS) non è necessario riavviare il server o IIS.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Sistemi operativi desktop di WindowsWindows desktop operating systems

Abilitare Console di gestione IIS e Servizi Web.Enable the IIS Management Console and World Wide Web Services.

  1. Passare a Pannello di controllo > Programmi > Programmi e funzionalità > Attiva o disattiva funzionalità di Windows (sul lato sinistro dello schermo).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Aprire il nodo Internet Information Services.Open the Internet Information Services node. Aprire il nodo Strumenti di gestione Web.Open the Web Management Tools node.

  3. Selezionare la casella per Console di gestione IIS.Check the box for IIS Management Console.

  4. Selezionare la casella per Servizi World Wide Web.Check the box for World Wide Web Services.

  5. Accettare le funzionalità predefinite per Servizi World Wide Web o personalizzare le funzionalità IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Autenticazione di Windows (facoltativa)Windows Authentication (Optional)
    Per abilitare l'autenticazione di Windows, espandere i nodi seguenti: Servizi Web > Sicurezza.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Selezionare la funzionalità Autenticazione di Windows.Select the Windows Authentication feature. Per altre informazioni, vedere Autenticazione di Windows<windowsAuthentication> e Configurare l'autenticazione Windows.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (facoltativo)WebSockets (Optional)
    WebSockets è supportato con ASP.NET Core 1.1 o versioni successive.WebSockets is supported with ASP.NET Core 1.1 or later. Per abilitare WebSockets, espandere i nodi seguenti: Servizi Web > Funzionalità per lo sviluppo di applicazioni.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Selezionare la funzionalità Protocollo WebSocket.Select the WebSocket Protocol feature. Per altre informazioni, vedere Oggetti WebSocket.For more information, see WebSockets.

  6. Se l'installazione di IIS richiede un riavvio, riavviare il sistema.If the IIS installation requires a restart, restart the system.

La console di gestione IIS e servizi World Wide Web sono selezionati nelle funzionalità di Windows.

Installare il bundle di hosting .NET CoreInstall the .NET Core Hosting Bundle

Installare il bundle di hosting .NET Core nel sistema di hosting.Install the .NET Core Hosting Bundle on the hosting system. L'aggregazione installa il runtime di .NET Core, la libreria di .NET Core e il modulo ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. Il modulo consente l'esecuzione delle app ASP.NET Core dietro IIS.The module allows ASP.NET Core apps to run behind IIS. Se il sistema non ha una connessione Internet, ottenere e installare Microsoft Visual C++ 2015 Redistributable prima di installare il bundle di hosting .NET Core.If the system doesn't have an Internet connection, obtain and install the Microsoft Visual C++ 2015 Redistributable before installing the .NET Core Hosting Bundle.

Importante

Se il bundle di hosting viene installato prima di IIS, è necessario riparare l'installazione del bundle.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Eseguire di nuovo il programma di installazione del bundle di hosting dopo l'installazione di IIS.Run the Hosting Bundle installer again after installing IIS.

Se il bundle di hosting viene installato dopo l'installazione della versione a 64 bit (x64) di .NET Core, uno o più SDK potrebbero risultare mancanti (Non sono stati rilevati .NET Core SDK).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Per risolvere il problema, vedere Risolvere i problemi di progetti ASP.NET Core.To resolve the problem, see Risolvere i problemi di progetti ASP.NET Core.

Download diretto (versione corrente)Direct download (current version)

Scaricare il programma di installazione mediante il collegamento seguente:Download the installer using the following link:

Programma di installazione del bundle di hosting .NET Core corrente (download diretto)Current .NET Core Hosting Bundle installer (direct download)

Versioni precedenti del programma di installazioneEarlier versions of the installer

Per ottenere una versione precedente del programma di installazione:To obtain an earlier version of the installer:

  1. Passare agli archivi dei download per .NET.Navigate to the .NET download archives.
  2. In .NET Core, selezionare la versione di .NET Core.Under .NET Core, select the .NET Core version.
  3. Nella colonna Run apps - Runtime (App di esecuzione - Runtime), trovare la riga della versione di runtime di .NET Core desiderata.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Scaricare il programma di installazione tramite il collegamento Runtime & Hosting Bundle (Runtime e bundle di hosting).Download the installer using the Runtime & Hosting Bundle link.

Avviso

Alcuni programmi di installazione contengono versioni che hanno terminato il loro ciclo di vita e non sono più supportate da Microsoft.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Per altre informazioni, vedere i criteri di supporto.For more information, see the support policy.

Installare il bundle di hostingInstall the Hosting Bundle

  1. Eseguire il programma di installazione nel server.Run the installer on the server. Quando si esegue il programma di installazione da una shell dei comandi di amministratore sono disponibili i parametri seguenti:The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1 – Ignora l'installazione del modulo ASP.NET Core.OPT_NO_ANCM=1 – Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1 – Ignora l'installazione del runtime .NET Core.OPT_NO_RUNTIME=1 – Skip installing the .NET Core runtime.
    • OPT_NO_SHAREDFX=1 – Ignora l'installazione del framework condiviso di ASP.NET (runtime ASP.NET).OPT_NO_SHAREDFX=1 – Skip installing the ASP.NET Shared Framework (ASP.NET runtime).
    • OPT_NO_X86=1 – Ignora l'installazione dei runtime x86.OPT_NO_X86=1 – Skip installing x86 runtimes. Usare questo parametro se si è certi che non verrà eseguito l'hosting di app a 32 bit.Use this parameter when you know that you won't be hosting 32-bit apps. Se non esiste alcuna possibilità che in futuro venga eseguito l'hosting di app sia a 32 che a 64 bit, non usare questo parametro e installare entrambi i runtime.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1 – Disabilitare il controllo dell'uso di una configurazione condivisa di IIS quando la configurazione condivisa (applicationHost.config) è nello stesso computer dell'installazione di IIS.OPT_NO_SHARED_CONFIG_CHECK=1 – Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Disponibile solo per i programmi di installazione di bundler di hosting ASP.NET Core 2.2 o versioni successive.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Per ulteriori informazioni, vedere Modulo ASP.NET Core.For more information, see Modulo ASP.NET Core.
  2. Riavviare il sistema o eseguire net stop was /y seguito da net start w3svc da una shell dei comandi.Restart the system or execute net stop was /y, followed by net start w3svc from a command shell. Il riavvio di IIS rileva una modifica alla variabile di ambiente di sistema PATH apportata dal programma di installazione.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

Nota

Per informazioni sulla configurazione condivisa di IIS, vedere Modulo di ASP.NET Core con configurazione condivisa di IIS.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Installare la Distribuzione Web quando si pubblica con Visual StudioInstall Web Deploy when publishing with Visual Studio

Quando si distribuiscono app ai server con Distribuzione Web, installare la versione più recente di Distribuzione Web nel server.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Per installare Distribuzione Web usare l'Installazione guidata piattaforma Web (WebPI) o ottenere direttamente un programma di installazione in Microsoft Download Center.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. Il metodo preferito consiste nell'usare WebPI.The preferred method is to use WebPI. WebPI offre un'installazione autonoma e una configurazione per i provider di hosting.WebPI offers a standalone setup and a configuration for hosting providers.

Creare il sito IISCreate the IIS site

  1. Nel sistema host creare una cartella per contenere le cartelle e i file pubblicati dell'app.On the hosting system, create a folder to contain the app's published folders and files. Un layout di distribuzione di un'app è descritto nell'argomento Struttura della directory.An app's deployment layout is described in the Directory Structure topic.

  2. In Gestione IIS aprire il nodo del server nel pannello Connessioni.In IIS Manager, open the server's node in the Connections panel. Fare clic con il pulsante destro del mouse sulla cartella Siti.Right-click the Sites folder. Scegliere Aggiungi sito Web dal menu di scelta rapida.Select Add Website from the contextual menu.

  3. Specificare un Nome del sito e impostare il Percorso fisico per la cartella di distribuzione dell'app.Provide a Site name and set the Physical path to the app's deployment folder. Specificare la configurazione in Binding e creare il sito Web scegliendo OK:Provide the Binding configuration and create the website by selecting OK:

    Specificare il nome del sito, il percorso fisico e il nome Host nel passaggio Aggiungi sito Web.

    Avviso

    Le associazioni con caratteri jolly di livello superiore (http://*:80/ e http://+:80) non devono essere usate,Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. poiché possono introdurre vulnerabilità a livello di sicurezza nell'app.Top-level wildcard bindings can open up your app to security vulnerabilities. Questo concetto vale sia per i caratteri jolly sicuri che vulnerabili.This applies to both strong and weak wildcards. Usare nomi host espliciti al posto di caratteri jolly.Use explicit host names rather than wildcards. L'associazione con caratteri jolly del sottodominio (ad esempio, *.mysub.com) non costituisce un rischio per la sicurezza se viene controllato l'intero dominio padre (a differenza di *.com, che è vulnerabile).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Vedere la sezione 5.4 di RFC7230 per altre informazioni.See rfc7230 section-5.4 for more information.

  4. Nel nodo del server selezionare Pool di applicazioni.Under the server's node, select Application Pools.

  5. Fare clic con il pulsante destro del mouse sul pool di applicazioni del sito e scegliere Impostazioni di base dal menu di scelta rapida.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. Nella finestra Modifica pool di applicazioni impostare Versione .NET CLR su Nessun codice gestito.In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Impostare Nessun codice gestito per la versione .NET CLR.

    ASP.NET Core viene eseguito in un processo separato e gestisce il runtime.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core non si basa sul caricamento di Common Language Runtime (CLR di .NET) desktop. Core Common Language Runtime (CoreCLR) for .NET Core viene avviato per ospitare l'app nel processo di lavoro.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. L'impostazione di Versione .NET CLR su Nessun codice gestito è facoltativa ma consigliata.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 o versione successiva: per una distribuzione autonoma a 64 bit (x64) che usa il modello di hosting in-process, disabilitare il pool di app per i processi a 32 bit (x86).ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    Nella barra laterale Azioni in Gestione IIS > Pool di applicazioni selezionare Impostazioni predefinite pool di applicazioni o Impostazioni avanzate.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Individuare Attiva applicazioni a 32 bit e impostare il valore su False.Locate Enable 32-Bit Applications and set the value to False. Questa impostazione non viene applicata alle app distribuite per l'hosting out-of-process.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Confermare che l'identità del modello del processo disponga delle autorizzazioni appropriate.Confirm the process model identity has the proper permissions.

    Se l'identità predefinita del pool di app (Modello di processo > Identità) viene modificata da ApplicationPoolIdentity a un'altra identità, verificare che la nuova identità disponga delle autorizzazioni necessarie per l'accesso alla cartella dell'app, al database e alle altre risorse richieste.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Ad esempio, il pool di applicazioni richiede l'accesso in lettura e scrittura alle cartelle in cui l'app legge e scrive i file.For example, the app pool requires read and write access to folders where the app reads and writes files.

Configurazione dell'autenticazione di Windows (facoltativa)Windows Authentication configuration (Optional)
Per altre informazioni, vedere Configurare l'autenticazione Windows.For more information, see Configure Windows authentication.

Distribuire l'appDeploy the app

Distribuire l'app nella cartella creata nel sistema host.Deploy the app to the folder created on the hosting system. Il metodo consigliato per la distribuzione è Distribuzione Web.Web Deploy is the recommended mechanism for deployment.

Distribuzione web con Visual StudioWeb Deploy with Visual Studio

Vedere l'argomento Visual Studio publish profiles for ASP.NET Core app deployment (Profili di pubblicazione Visual Studio per la distribuzione di app ASP.NET Core) per informazioni su come creare un profilo di pubblicazione da usare con Distribuzione Web.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Se il provider di hosting fornisce un profilo di pubblicazione o il supporto per crearne uno, scaricare il profilo e importarlo usando la finestra di dialogo Pubblica di Visual Studio.If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog.

Pagina della finestra di dialogo Pubblica

Distribuzione Web all'esterno di Visual StudioWeb Deploy outside of Visual Studio

È anche possibile usare Distribuzione Web all'esterno di Visual Studio dalla riga di comando.Web Deploy can also be used outside of Visual Studio from the command line. Per altre informazioni sulla distribuzione, vedere Strumento Distribuzione Web.For more information, see Web Deployment Tool.

Alternative a Distribuzione webAlternatives to Web Deploy

Usare uno dei metodi disponibili, ad esempio la copia manuale, Xcopy, Robocopy o PowerShell, per spostare l'app nel sistema host.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Per altre informazioni sulla distribuzione di ASP.NET Core in IIS, vedere la sezione Risorse di distribuzione per amministratori IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Esplorare il sito WebBrowse the website

Il browser Microsoft Edge ha caricato la pagina di avvio IIS.

File di distribuzione bloccatiLocked deployment files

I file nella cartella di distribuzione sono bloccati durante l'esecuzione dell'app.Files in the deployment folder are locked when the app is running. I file bloccati non possono essere sovrascritti durante la distribuzione.Locked files can't be overwritten during deployment. Per rilasciare i file bloccati in una distribuzione, arrestare il pool di applicazioni usando uno dei metodi seguenti:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Usare Distribuzione Web e fare riferimento a Microsoft.NET.Sdk.Web nel file di progetto.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Nella radice della directory dell'app web viene posizionato un file app_offline.htm.An app_offline.htm file is placed at the root of the web app directory. Quando il file è presente, il modulo ASP.NET Core arresta normalmente l'app e rende disponibile il file app_offline.htm durante la distribuzione.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Per altre informazioni, vedere la Guida di riferimento per la configurazione del modulo ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

  • Arrestare manualmente il pool di applicazioni in Gestione IIS sul server.Manually stop the app pool in the IIS Manager on the server.

  • Usare PowerShell per eliminare app_offline.html (è richiesto PowerShell 5 o versione successiva):Use PowerShell to drop app_offline.html (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Protezione dei datiData protection

Lo stack di protezione dei dati di ASP.NET Core viene usato da diversi middleware di ASP.NET Core, inclusi quelli usati nell'autenticazione.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Anche se le DPAPI (Data Protection API) non vengono chiamate dal codice dell'utente, è consigliabile configurare la protezione dati per la creazione di un archivio di chiavi crittografiche permanente con uno script di distribuzione o nel codice dell'utente.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Se non si configura la protezione dei dati, le chiavi vengono mantenute in memoria ed eliminate al riavvio dell'app.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Se il gruppo di chiavi viene archiviato in memoria quando l'app viene riavviata:If the key ring is stored in memory when the app restarts:

  • Tutti i token di autenticazione basati su cookie vengono invalidati.All cookie-based authentication tokens are invalidated.
  • Gli utenti devono ripetere l'accesso alla richiesta successiva.Users are required to sign in again on their next request.
  • Tutti i dati protetti con il gruppo di chiavi non possono più essere decrittografati.Any data protected with the key ring can no longer be decrypted. Possono essere inclusi i token CSRF e i cookie TempData di ASP.NET Core MVC.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Per configurare la protezione dati in IIS in modo da rendere permanente il gruppo di chiavi, usare uno degli approcci seguenti:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Creare chiavi del Registro di sistema di protezione datiCreate Data Protection Registry Keys

    Le chiavi di protezione dati usate dalle app ASP.NET Core vengono archiviate nel Registro di sistema esterno alle app.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Per mantenere le chiavi per una determinata app, creare chiavi del Registro di sistema per il pool di applicazioni.To persist the keys for a given app, create registry keys for the app pool.

    Per le installazioni IIS autonome non web farm è possibile usare lo script PowerShell Data Protection Provision-AutoGenKeys.ps1 (Provisioning di protezione dati-AutoGenKeys.ps1) per ogni pool di app usato con un'app ASP.NET Core.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Questo script crea una chiave del Registro di sistema nel registro HKLM accessibile solo all'account del processo di lavoro del pool di applicazioni dell'app.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Le chiavi vengono crittografate a riposo tramite DPAPI con una chiave a livello del computer.Keys are encrypted at rest using DPAPI with a machine-wide key.

    In scenari di web farm un'app può essere configurata in modo da usare un percorso UNC in cui archiviare il proprio gruppo di chiavi di protezione dati.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. Per impostazione predefinita, le chiavi di protezione dati non vengono crittografate.By default, the data protection keys aren't encrypted. Assicurarsi che le autorizzazioni file per la condivisione di rete siano limitate all'account di Windows in cui viene eseguita l'app.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. È possibile usare un certificato X509 per la protezione delle chiavi inattive.An X509 certificate can be used to protect keys at rest. Prendere in considerazione un meccanismo per consentire agli utenti di caricare i certificati: Posizionare i certificati nell'archivio certificati attendibili dell'utente e assicurarsi che siano disponibili in tutti i computer in cui viene eseguita l'app dell'utente.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Vedere Configurare la protezione dati di ASP.NET Core per altri dettagli.See Configure ASP.NET Core Data Protection for details.

  • Configurare il pool di applicazioni IIS per caricare il profilo utenteConfigure the IIS Application Pool to load the user profile

    Questa impostazione si trova nella sezione Modello del processo in Impostazioni avanzate per il pool di app.This setting is in the Process Model section under the Advanced Settings for the app pool. Impostare Caricamento del profilo utente su True.Set Load User Profile to True. Con l'impostazione True le chiavi vengono archiviate nella directory del profilo utente e protette tramite DPAPI con una chiave specifica per l'account utente.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Le chiavi vengono salvate in modo permanente nella cartella %LOCALAPPDATA%/ASP.NET/DataProtection-Keys.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    Deve essere abilitato anche l'attributo setProfileEnvironment del pool di app.The app pool's setProfileEnvironment attribute must also be enabled. Il valore predefinito di setProfileEnvironment è true.The default value of setProfileEnvironment is true. In alcuni scenari (ad esempio, per il sistema operativo Windows), setProfileEnvironment è impostato su false.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Se le chiavi non vengono archiviate nella directory del profilo utente come previsto:If keys aren't stored in the user profile directory as expected:

    1. Passare alla cartella %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Aprire il file applicationHost.config.Open the applicationHost.config file.
    3. Individuare l'elemento <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Verificare che l'attributo setProfileEnvironment non sia presente, condizione che corrisponde all'impostazione predefinita true, o impostare in modo esplicito il valore dell'attributo su true.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Usare il file system come archivio del gruppo di chiaviUse the file system as a key ring store

    Modificare il codice dell'app per usare il file system come archivio del gruppo di chiavi.Adjust the app code to use the file system as a key ring store. Usare un certificato X509 per proteggere il gruppo di chiavi e verificare che sia un certificato attendibile.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Se il certificato è autofirmato, inserirlo nell'archivio radice attendibile.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Quando si usa IIS in una web farm:When using IIS in a web farm:

    • Usare una condivisione di file a cui possono accedere tutti i computer.Use a file share that all machines can access.
    • Distribuire un certificato X509 in ogni computer.Deploy an X509 certificate to each machine. Configurare protezione dei dati nel codice.Configure data protection in code.
  • Impostare criteri a livello di computer per la protezione dei datiSet a machine-wide policy for data protection

    Il sistema di protezione dei dati ha un supporto limitato per l'impostazione di criteri a livello di computer predefiniti per tutte le app che usano le API di protezione dei dati.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Per ulteriori informazioni, vedere Protezione dei dati di ASP.NET Core.For more information, see Protezione dei dati di ASP.NET Core.

Directory virtualiVirtual Directories

Le directory virtuali IIS non sono supportate con le app ASP.NET Core.IIS Virtual Directories aren't supported with ASP.NET Core apps. Un'app può essere ospitata come applicazione secondaria.An app can be hosted as a sub-application.

Applicazioni secondarieSub-applications

Un'app ASP.NET Core può essere ospitata come applicazione secondaria di IIS (app secondaria).An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). Il percorso dell'app secondaria diventa parte dell'URL dell'app radice.The sub-app's path becomes part of the root app's URL.

Un'app secondaria non deve includere il modulo ASP.NET Core come gestore.A sub-app shouldn't include the ASP.NET Core Module as a handler. Se il modulo viene aggiunto come gestore nel file web.config di un'app secondaria, quando si prova a esplorare l'app secondaria si riceve un messaggio 500.19 (errore interno del server) che segnala errori nel file di configurazione.If the module is added as a handler in a sub-app's web.config file, a 500.19 Internal Server Error referencing the faulty config file is received when attempting to browse the sub-app.

L'esempio seguente illustra un file web.config pubblicato per un'app secondaria di ASP.NET Core:The following example shows a published web.config file for an ASP.NET Core sub-app:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Quando si ospita un'app secondaria non ASP.NET Core in un'app ASP.NET Core, è necessario rimuovere in modo esplicito il gestore ereditato nel file web.config dell'app secondaria:When hosting a non-ASP.NET Core sub-app underneath an ASP.NET Core app, explicitly remove the inherited handler in the sub-app's web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

I collegamenti ad asset statici all'interno dell'app secondaria devono usare la notazione con tilde-barra (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. La notazione con tilde-barra attiva un helper tag per anteporre la base del percorso dell'app secondaria al collegamento relativo sottoposto a rendering.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Per un'app secondaria in /subapp_path, il rendering di un'immagine collegata con src="~/image.png" viene eseguito come src="/subapp_path/image.png".For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". Il middleware dei file statici dell'app radice non elabora la richiesta di file statici.The root app's Static File Middleware doesn't process the static file request. La richiesta viene elaborata dal middleware dei file statici dell'app secondaria.The request is processed by the sub-app's Static File Middleware.

Se l'attributo src di un asset statico viene impostato su un percorso assoluto (ad esempio, src="/image.png"), il rendering del collegamento viene eseguito senza la base del percorso dell'app secondaria.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. Il middleware dei file statici dell'app radice prova a servire l'asset dalla radice Web dell'app radice con conseguente risposta 404 - Non trovato, a meno che l'asset statico non sia disponibile dal'app radice.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

Per ospitare un'app ASP.NET Core come app secondaria in un'altra app ASP.NET Core:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Definire un pool di app per l'app secondaria.Establish an app pool for the sub-app. Impostare Versione .NET CLR su Nessun codice gestito perché Core Common Language Runtime (CoreCLR) for .NET Core viene avviato per ospitare l'app nel processo di lavoro e non CLR desktop (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Aggiungere il sito radice in Gestione IIS con l'applicazione secondaria in una cartella all'interno del sito principale.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Fare clic con il pulsante destro del mouse sulla cartella dell'applicazione secondaria in Gestione IIS e scegliere Converti in applicazione.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Nella finestra di dialogo Aggiungi applicazione usare il pulsante Seleziona per Pool di applicazioni per assegnare il pool di app creato per l'app secondaria.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Scegliere OK.Select OK.

L'assegnazione di un pool di app separato all'app secondaria è un requisito quando si usa il modello di hosting in-process.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Per altre informazioni sul modello di hosting in-process e sulla configurazione del modulo ASP.NET Core, vedere Modulo ASP.NET Core e Modulo ASP.NET Core.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see Modulo ASP.NET Core and Modulo ASP.NET Core.

Configurazione di IIS con web.configConfiguration of IIS with web.config

La configurazione di IIS è influenzata dalla sezione <system.webServer> di web.config per gli scenari IIS funzionali per le app ASP.NET Core con il modulo ASP.NET Core.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Ad esempio, la configurazione di IIS è funzionale per la compressione dinamica.For example, IIS configuration is functional for dynamic compression. Se IIS è configurato a livello di server per l'uso della compressione dinamica, l'elemento <urlCompression> nel file web.config dell'app può disabilitare questa impostazione per un'app ASP.NET Core.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Per altre informazioni, vedere la guida di riferimento per la configurazione di <system.webServer>, la guida di riferimento per la configurazione del modulo ASP.NET Core e Moduli IIS con ASP.NET Core.For more information, see the configuration reference for <system.webServer>, ASP.NET Core Module Configuration Reference, and IIS Modules with ASP.NET Core. Per impostare variabili di ambiente per singole app in esecuzione in pool di applicazioni isolate (supportati per IIS 10.0 o versioni successive), vedere la sezione Comando AppCmd.exe dell'argomento Variabili di ambiente <environmentVariables> nella documentazione di riferimento di IIS.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Sezioni di configurazione di web.configConfiguration sections of web.config

Le sezioni di configurazione di app ASP.NET 4.x in web.config non vengono usate dalle app ASP.NET Core per la configurazione:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Le applicazioni ASP.NET Core vengono configurate tramite altri provider di configurazione.ASP.NET Core apps are configured using other configuration providers. Per altre informazioni, vedere Configurazione.For more information, see Configuration.

Pool di applicazioniApplication Pools

L'isolamento dei pool di app è determinato dal modello di hosting:App pool isolation is determined by the hosting model:

  • Hosting in-process – Le app devono essere eseguite in pool di app separati.In-process hosting – Apps are required to run in separate app pools.
  • Hosting out-of-process – È consigliabile isolare le app le une dalle altre eseguendo ogni app nel relativo pool di applicazioni.Out-of-process hosting – We recommend isolating the apps from each other by running each app in its own app pool.

Nella finestra di dialogo Aggiungi sito Web è selezionato per impostazione predefinita un singolo pool di app per ogni app.The IIS Add Website dialog defaults to a single app pool per app. Quando si specifica un valore in Nome del sito, il testo viene automaticamente trasferito alla casella di testo Pool di applicazioni.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Quando si aggiunge il sito viene creato un nuovo pool di applicazioni con il nome del sito.A new app pool is created using the site name when the site is added.

Quando si ospitano più siti Web in un server, è consigliabile isolare le app le une dalle altre eseguendo ogni app nel relativo pool di applicazioni.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. La finestra di dialogo Aggiungi sito Web di IIS ha questa configurazione come impostazione predefinita.The IIS Add Website dialog defaults to this configuration. Quando si specifica un valore in Nome del sito, il testo viene automaticamente trasferito alla casella di testo Pool di applicazioni.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Quando si aggiunge il sito viene creato un nuovo pool di applicazioni con il nome del sito.A new app pool is created using the site name when the site is added.

Identità del pool di applicazioneApplication Pool Identity

Un account di identità del pool di app consente di eseguire un'app in un account univoco, senza dover creare e gestire domini o account locali.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. In IIS 8.0 o versioni successive il processo di lavoro amministrazione IIS (WAS) crea un account virtuale con il nome del nuovo pool di applicazioni ed esegue i processi di lavoro del pool di applicazioni inclusi nell'account per impostazione predefinita.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. Nella Console di gestione IIS in Impostazioni avanzate per il pool di app verificare che Identità sia impostata su ApplicationPoolIdentity:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Finestra di dialogo Impostazioni avanzate del pool di applicazione

Il processo di gestione IIS crea un identificatore sicuro con il nome del pool di app nel sistema di sicurezza di Windows.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Le risorse possono essere protette mediante questa identità,Resources can be secured using this identity. che tuttavia non è un account utente reale e non viene visualizzata nella console di gestione utenti di Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Se il processo di lavoro IIS richiede l'accesso con privilegi elevati all'app, modificare l'elenco di controllo di accesso (ACL) della directory contenente l'app:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Aprire Esplora risorse, quindi spostarsi nella directory.Open Windows Explorer and navigate to the directory.

  2. Fare clic con il pulsante destro del mouse sulla directory e scegliere Proprietà.Right-click on the directory and select Properties.

  3. Nella scheda Sicurezza selezionare il pulsante Modifica e quindi il pulsante Aggiungi.Under the Security tab, select the Edit button and then the Add button.

  4. Fare clic sul pulsante Percorsi e verificare che il sistema sia selezionato.Select the Locations button and make sure the system is selected.

  5. Immettere IIS AppPool\<nome_pool_applicazioni> nell'area Immettere i nomi degli oggetti da selezionare.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Fare clic sul pulsante Controlla nomi.Select the Check Names button. Per DefaultAppPool controllare i nomi usando IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Quando il pulsante Controlla nomi è selezionato, nell'area dei nomi degli oggetti viene indicato un valore di DefaultAppPool.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Non è possibile immettere il nome del pool di applicazioni direttamente nell'area dei nomi degli oggetti.It isn't possible to enter the app pool name directly into the object names area. Usare il formato IIS AppPool\<nome_pool_applicazioni> durante il controllo dei nomi degli oggetti.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Finestra di dialogo Seleziona utenti o gruppi per la cartella dell'app: il nome del pool di applicazioni "DefaultAppPool" viene aggiunto in coda a "IIS AppPool" nell'area dei nomi degli oggetti prima di selezionare "Controlla nomi".

  6. Scegliere OK.Select OK.

    Finestra di dialogo Seleziona utenti o gruppi per la cartella dell'app: dopo aver selezionato "Controlla nomi", il nome dell'oggetto "DefaultAppPool" viene visualizzato nell'area dei nomi degli oggetti.

  7. Le autorizzazioni di lettura ed esecuzione devono essere concesse per impostazione predefinita.Read & execute permissions should be granted by default. Fornire autorizzazioni aggiuntive in base alle necessità.Provide additional permissions as needed.

L'accesso può essere concesso anche dal prompt dei comandi usando lo strumento ICACLS.Access can also be granted at a command prompt using the ICACLS tool. Usando DefaultAppPool come esempio, viene eseguito il comando seguente:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Per altre informazioni, vedere l'argomento icacls.For more information, see the icacls topic.

Supporto per HTTP/2HTTP/2 support

HTTP/2 è supportato con ASP.NET Core negli scenari di distribuzione IIS seguenti:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • In-ProcessIn-process
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successiveWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Connessione TLS 1.2 o successivaTLS 1.2 or later connection
  • Out-of-processOut-of-process
    • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successiveWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Le connessioni server perimetrali pubbliche usano HTTP/2, mentre la connessione con proxy inverso al server Kestrel usa HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • Connessione TLS 1.2 o successivaTLS 1.2 or later connection

Per una distribuzione In-Process, se viene stabilita una connessione HTTP/2, HttpRequest.Protocol corrisponde a HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Per una distribuzione out-of-process, se viene stabilita una connessione HTTP/2, HttpRequest.Protocol corrisponde a HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Per altre informazioni sui modelli di hosting in-process e out-of-process, vedere Modulo ASP.NET Core.For more information on the in-process and out-of-process hosting models, see Modulo ASP.NET Core.

HTTP/2 è supportato per le distribuzioni out-of-process che soddisfano i requisiti seguenti:HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016/Windows 10 o versioni successive; IIS 10 o versioni successiveWindows Server 2016/Windows 10 or later; IIS 10 or later
  • Le connessioni server perimetrali pubbliche usano HTTP/2, mentre la connessione con proxy inverso al server Kestrel usa HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
  • Framework di destinazione: non applicabile alle distribuzioni out-of-process, in quanto la connessione HTTP/2 è gestita interamente da IIS.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • Connessione TLS 1.2 o successivaTLS 1.2 or later connection

Se viene stabilita una connessione HTTP/2, HttpRequest.Protocol corrisponde a HTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

HTTP/2 è abilitato per impostazione predefinita.HTTP/2 is enabled by default. Se non viene stabilita una connessione HTTP/2, la connessione esegue il fallback a HTTP/1.1.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Per altre informazioni sulla configurazione di HTTP/2 con le distribuzioni IIS, vedere HTTP/2 on IIS (HTTP/2 in IIS).For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Richieste preliminari CORSCORS preflight requests

Questa sezione si applica solo alle app ASP.NET Core destinate a .NET Framework.This section only applies to ASP.NET Core apps that target the .NET Framework.

Per un'app ASP.NET Core destinata a .NET Framework, le richieste OPTIONS non vengono passate all'app per impostazione predefinita in IIS.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Per informazioni su come configurare i gestori IIS dell'app in web.config per passare le richieste OPTIONS, vedere Abilitazione di richieste multiorigine nell'API Web ASP.NET 2: Funzionamento di CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Modulo di inizializzazione dell'applicazione e timeout di inattivitàApplication Initialization Module and Idle Timeout

Per l'hosting in IIS dal modulo ASP.NET Core versione 2:When hosted in IIS by the ASP.NET Core Module version 2:

Modulo Inizializzazione applicazioneApplication Initialization Module

Si applica alle app ospitate in-process e out-of-process.Applies to apps hosted in-process and out-of-process.

Inizializzazione applicazione di IIS è una funzionalità di IIS che invia una richiesta HTTP all'app quando il pool di app viene avviato o riciclato.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. La richiesta attiva l'avvio dell'app.The request triggers the app to start. Per impostazione predefinita, IIS invia una richiesta all'URL radice dell'app (/) per inizializzare l'app (vedere le risorse aggiuntive per altri dettagli sulla configurazione).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

Verificare che la funzionalità del ruolo Inizializzazione applicazione di IIS sia abilitata:Confirm that the IIS Application Initialization role feature in enabled:

Nei sistemi desktop Windows 7 o versioni successive quando si usa IIS in locale:On Windows 7 or later desktop systems when using IIS locally:

  1. Passare a Pannello di controllo > Programmi > Programmi e funzionalità > Disattivare o attivare le funzionalità di Windows (a sinistra dello schermo).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Aprire Internet Information Services > Servizi Web > Funzionalità per lo sviluppo di applicazioni.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Selezionare la casella di controllo Inizializzazione applicazione.Select the check box for Application Initialization.

In Windows Server 2008 R2 o versioni successive:On Windows Server 2008 R2 or later:

  1. Aprire l'Aggiunta guidata ruoli e funzionalità.Open the Add Roles and Features Wizard.
  2. Nel pannello Selezione servizi ruolo aprire il nodo Sviluppo applicazioni.In the Select role services panel, open the Application Development node.
  3. Selezionare la casella di controllo Inizializzazione applicazione.Select the check box for Application Initialization.

Per abilitare il modulo Inizializzazione applicazione per il sito, usare uno degli approcci seguenti:Use either of the following approaches to enable the Application Initialization Module for the site:

  • In Gestione IIS:Using IIS Manager:

    1. Selezionare Pool di applicazioni nel pannello Connessioni.Select Application Pools in the Connections panel.
    2. Fare clic con il pulsante destro del mouse sul pool di app dell'app nell'elenco e scegliere Impostazioni avanzate.Right-click the app's app pool in the list and select Advanced Settings.
    3. L'impostazione predefinita per Modalità avvio è OnDemand.The default Start Mode is OnDemand. Impostare Modalità avvio su AlwaysRunning.Set the Start Mode to AlwaysRunning. Scegliere OK.Select OK.
    4. Aprire il nodo Siti nel pannello Connessioni.Open the Sites node in the Connections panel.
    5. Fare clic con il pulsante destro del mouse sull'app e scegliere Gestisci sito Web > Impostazioni avanzate.Right-click the app and select Manage Website > Advanced Settings.
    6. L'impostazione predefinita di Precaricamento abilitato è False.The default Preload Enabled setting is False. Impostare Precaricamento abilitato su True.Set Preload Enabled to True. Scegliere OK.Select OK.
  • Usando web.config aggiungere l'elemento <applicationInitialization> con doAppInitAfterRestart impostato su true per gli elementi <system.webServer> nel file web.config dell'app:Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

Timeout di inattivitàIdle Timeout

Si applica solo alle app ospitate in-process.Only applies to apps hosted in-process.

Per evitare l'inattività dell'app, impostare il timeout di inattività del pool di app tramite Gestione IIS:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Selezionare Pool di applicazioni nel pannello Connessioni.Select Application Pools in the Connections panel.
  2. Fare clic con il pulsante destro del mouse sul pool di app dell'app nell'elenco e scegliere Impostazioni avanzate.Right-click the app's app pool in the list and select Advanced Settings.
  3. L'impostazione predefinita di Timeout di inattività (minuti) è 20 minuti.The default Idle Time-out (minutes) is 20 minutes. Impostare Timeout di inattività (minuti) su 0 (zero).Set the Idle Time-out (minutes) to 0 (zero). Scegliere OK.Select OK.
  4. Riciclare il processo di lavoro.Recycle the worker process.

Per evitare il timeout delle app ospitate out-of-process, usare uno degli approcci seguenti:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Risorse aggiuntive per il modulo Inizializzazione applicazione e il timeout di inattivitàApplication Initialization Module and Idle Timeout additional resources

Risorse di distribuzione per amministratori IISDeployment resources for IIS administrators

Informazioni approfondite su IIS nella documentazione di IIS.Learn about IIS in-depth in the IIS documentation.
Documentazione di ISSIIS documentation

Informazioni sui modelli di distribuzione di app .NET Core.Learn about .NET Core app deployment models.
Distribuzione di applicazioni .NET Core.NET Core application deployment

Informazioni su come il modulo ASP.NET Core consente al server Web Kestrel di usare IIS o IIS Express come server proxy inverso.Learn how the ASP.NET Core Module allows the Kestrel web server to use IIS or IIS Express as a reverse proxy server.
Modulo ASP.NET CoreASP.NET Core Module

Informazioni su come configurare il modulo di ASP.NET Core per l'hosting di app ASP.NET Core.Learn how to configure the ASP.NET Core Module for hosting ASP.NET Core apps.
Guida di riferimento per la configurazione del modulo ASP.NET CoreASP.NET Core Module configuration reference

Informazioni sulla struttura di directory delle app ASP.NET Core pubblicate.Learn about the directory structure of published ASP.NET Core apps.
Struttura di directoryDirectory structure

Individuare i moduli IIS attivi e inattivi per le app ASP.NET Core e come gestire i moduli IIS.Discover active and inactive IIS modules for ASP.NET Core apps and how to manage IIS modules.
Moduli IISIIS modules

Informazioni su come diagnosticare i problemi delle distribuzioni IIS di app ASP.NET Core.Learn how to diagnose problems with IIS deployments of ASP.NET Core apps.
Risolvere i problemiTroubleshoot

Riconoscere errori comuni dell'hosting di app ASP.NET Core in IIS.Distinguish common errors when hosting ASP.NET Core apps on IIS.
Errori comuni di Azure App Service e IISCommon errors reference for Azure App Service and IIS

Risorse aggiuntiveAdditional resources