Hospedar o ASP.NET Core no Windows com o IISHost ASP.NET Core on Windows with IIS

Por Luke LathamBy Luke Latham

Para uma experiência de tutorial sobre como publicar um aplicativo de ASP.NET Core em um servidor IIS, confira Publicar um aplicativo ASP.NET Core no IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Publicar um aplicativo ASP.NET Core no IIS.

Instalar o pacote de hospedagem do .NET CoreInstall the .NET Core Hosting Bundle

Supported operating systemsSupported operating systems

Há suporte para os seguintes sistemas operacionais:The following operating systems are supported:

  • Windows 7 ou posteriorWindows 7 or later
  • Windows Server 2008 R2 ou posteriorWindows Server 2008 R2 or later

O servidor HTTP.sys (anteriormente chamado de WebListener) não funciona em uma configuração de proxy reverso com o IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Use o servidor Kestrel.Use the Kestrel server.

Para obter mais informações sobre hospedagem no Azure, consulte Implantar aplicativos ASP.NET Core no Serviço de Aplicativo do Azure.For information on hosting in Azure, see Implantar aplicativos ASP.NET Core no Serviço de Aplicativo do Azure.

Para obter as diretrizes de solução de problemas, consulte Solucionar problemas de projetos ASP.NET Core.For troubleshooting guidance, see Solucionar problemas de projetos ASP.NET Core.

Plataformas com suporteSupported platforms

Aplicativos publicados para implantação de 32 bits (x86) ou 64 bits (x64) têm suporte.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Implantar um aplicativo de 32 bits com um SDK do .NET Core de 32 bits (x86), a menos que o aplicativo:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Exija o maior espaço de endereço de memória virtual disponível para um aplicativo de 64 bits.Requires the larger virtual memory address space available to a 64-bit app.
  • Exija o maior tamanho de pilha do IIS.Requires the larger IIS stack size.
  • Tenha dependências nativas de 64 bits.Has 64-bit native dependencies.

Use um SDK do .NET Core de 64 bits (x64) para publicar um aplicativo de 64 bits.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Um runtime de 64 bits deve estar presente no sistema host.A 64-bit runtime must be present on the host system.

Modelos de hospedagemHosting models

Modelo de hospedagem em processoIn-process hosting model

Usando uma hospedagem em processo, um aplicativo ASP.NET Core é executado no mesmo processo que seu processo de trabalho do IIS.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. A hospedagem em processo oferece desempenho melhor em hospedagem fora do processo porque as solicitações não são transmitidas por proxy pelo adaptador de loopback, um adaptador de rede que retorna o tráfego de rede de saída para o mesmo computador.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. O IIS manipula o gerenciamento de processos com o WAS (Serviço de Ativação de Processos do Windows).IIS handles process management with the Windows Process Activation Service (WAS).

O Módulo do ASP.NET Core:The ASP.NET Core Module:

  • Executa a inicialização do aplicativo.Performs app initialization.
    • Carrega o CoreCLR.Loads the CoreCLR.
    • Chama Program.Main.Calls Program.Main.
  • Manipula o tempo de vida da solicitação nativa do IIS.Handles the lifetime of the IIS native request.

Não há suporte para o modelo de hospedagem em processo para aplicativos ASP.NET Core direcionados ao .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

O diagrama a seguir ilustra a relação entre o IIS, o Módulo do ASP.NET Core e um aplicativo hospedado em processo:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Módulo do ASP.NET Core no cenário de hospedagem em processo

A solicitação chega da Web para o driver do HTTP.sys no modo kernel.A request arrives from the web to the kernel-mode HTTP.sys driver. O driver roteia as solicitações nativas ao IIS na porta configurada do site, normalmente, a 80 (HTTP) ou a 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). O módulo ASP.NET Core recebe a solicitação nativa e a passa para o servidor HTTP IIS (IISHttpServer).The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). O servidor HTTP do IIS é uma implementação de servidor em processo do IIS que converte a solicitação de nativa para gerenciada.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

Depois que o Servidor HTTP do IIS processa a solicitação, a solicitação é enviada por push para o pipeline de middleware do ASP.NET Core.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. O pipeline do middleware manipula a solicitação e a passa como uma instância de HttpContext para a lógica do aplicativo.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. A resposta do aplicativo é retornada ao IIS por meio do Servidor HTTP do IIS.The app's response is passed back to IIS through IIS HTTP Server. O IIS enviará a resposta ao cliente que iniciou a solicitação.IIS sends the response to the client that initiated the request.

A hospedagem em processo é uma opção de aceitação para os aplicativos existentes, mas o padrão dos modelos dotnet new é o modelo de hospedagem em processo para todos os cenários do IIS e do 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 adiciona uma instância IServer chamando o método UseIIS para inicializar o CoreCLR e hospedar o aplicativo no processo de trabalho do IIS (w3wp.exe ou 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). Os testes de desempenho indicam que hospedar um aplicativo em processo do .NET Core oferece uma taxa de transferência de solicitação significativamente mais elevada em comparação a hospedar o aplicativo fora do processo e enviar por proxy as solicitações para o servidor 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.

Observação

Aplicativos publicados como um único arquivo executável não podem ser carregados pelo modelo de hospedagem em processo.Apps published as a single file executable can't be loaded by the in-process hosting model.

Modelo de hospedagem de fora do processoOut-of-process hosting model

Como ASP.NET Core aplicativos são executados em um processo separado do processo de trabalho do IIS, o módulo ASP.NET Core lida com o gerenciamento de processos.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. O módulo inicia o processo para o aplicativo ASP.NET Core quando a primeira solicitação chega e reinicia o aplicativo se ele é desligado ou falha.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. Isso é basicamente o mesmo comportamento que o dos aplicativos que são executados dentro do processo e são gerenciados pelo WAS (Serviço de Ativação de Processos do 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).

O diagrama a seguir ilustra a relação entre o IIS, o Módulo do ASP.NET Core e um aplicativo hospedado de fora d processo:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Módulo do ASP.NET Core no cenário de hospedagem fora do processo

As solicitações chegam da Web para o driver do HTTP.sys no modo kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. O driver roteia as solicitações ao IIS na porta configurada do site, normalmente, a 80 (HTTP) ou a 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). O módulo encaminha as solicitações ao Kestrel em uma porta aleatória do aplicativo, que não seja a porta 80 ou 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

O módulo especifica a porta por meio de uma variável de ambiente na inicialização e a extensão UseIISIntegration configura o servidor para escutar em 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}. Outras verificações são executadas e as solicitações que não se originam do módulo são rejeitadas.Additional checks are performed, and requests that don't originate from the module are rejected. O módulo não é compatível com encaminhamento de HTTPS, portanto, as solicitações são encaminhadas por HTTP, mesmo se recebidas pelo IIS por HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Depois que o Kestrel coleta a solicitação do módulo, a solicitação é enviada por push ao pipeline do middleware do ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. O pipeline do middleware manipula a solicitação e a passa como uma instância de HttpContext para a lógica do aplicativo.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. O middleware adicionado pela integração do IIS atualiza o esquema, o IP remoto e pathbase para encaminhar a solicitação para o Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. A resposta do aplicativo é retornada ao IIS, que a retorna por push para o cliente HTTP que iniciou a solicitação.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

O ASP.NET Core vem com o servidor Kestrel, um servidor HTTP padrão multiplataforma.ASP.NET Core ships with Kestrel server, a default, cross-platform HTTP server.

Ao usar o IIS ou o IIS Express, o aplicativo é executado em um processo separado do processo de trabalho do IIS (fora do processo) com o servidor 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.

Como os aplicativos ASP.NET Core são executados em um processo separado do processo de trabalho do IIS, o módulo realiza o gerenciamento de processos.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. O módulo inicia o processo para o aplicativo ASP.NET Core quando a primeira solicitação chega e reinicia o aplicativo se ele é desligado ou falha.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. Isso é basicamente o mesmo comportamento que o dos aplicativos que são executados dentro do processo e são gerenciados pelo WAS (Serviço de Ativação de Processos do 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).

O diagrama a seguir ilustra a relação entre o IIS, o Módulo do ASP.NET Core e um aplicativo hospedado de fora d processo:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Módulo do ASP.NET Core

As solicitações chegam da Web para o driver do HTTP.sys no modo kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. O driver roteia as solicitações ao IIS na porta configurada do site, normalmente, a 80 (HTTP) ou a 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). O módulo encaminha as solicitações ao Kestrel em uma porta aleatória do aplicativo, que não seja a porta 80 ou 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

O módulo especifica a porta por meio de uma variável de ambiente na inicialização e o middleware de integração do IIS configura o servidor para escutar em 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}. Outras verificações são executadas e as solicitações que não se originam do módulo são rejeitadas.Additional checks are performed, and requests that don't originate from the module are rejected. O módulo não é compatível com encaminhamento de HTTPS, portanto, as solicitações são encaminhadas por HTTP, mesmo se recebidas pelo IIS por HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Depois que o Kestrel coleta a solicitação do módulo, a solicitação é enviada por push ao pipeline do middleware do ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. O pipeline do middleware manipula a solicitação e a passa como uma instância de HttpContext para a lógica do aplicativo.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. O middleware adicionado pela integração do IIS atualiza o esquema, o IP remoto e pathbase para encaminhar a solicitação para o Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. A resposta do aplicativo é retornada ao IIS, que a retorna por push para o cliente HTTP que iniciou a solicitação.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

CreateDefaultBuilder configura o servidor Kestrel como o servidor Web e habilita a integração do IIS, configurando o caminho base e a porta para o Módulo do 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.

O Módulo do ASP.NET Core gera uma porta dinâmica a ser atribuída ao processo de back-end.The ASP.NET Core Module generates a dynamic port to assign to the backend process. CreateDefaultBuilder chama o método UseIISIntegration.CreateDefaultBuilder calls the UseIISIntegration method. UseIISIntegration configura o Kestrel para escutar na porta dinâmica no endereço IP do localhost (127.0.0.1).UseIISIntegration configures Kestrel to listen on the dynamic port at the localhost IP address (127.0.0.1). Se a porta dinâmica for 1234, o Kestrel escutará em 127.0.0.1:1234.If the dynamic port is 1234, Kestrel listens at 127.0.0.1:1234. Essa configuração substitui outras configurações de URL fornecidas por:This configuration replaces other URL configurations provided by:

As chamadas a UseUrls ou à API Listen do Kestrel não são necessárias ao usar o módulo.Calls to UseUrls or Kestrel's Listen API aren't required when using the module. Se UseUrls ou Listen for chamado, o Kestrel escutará na porta especificada somente durante a execução do aplicativo sem o IIS.If UseUrls or Listen is called, Kestrel listens on the port specified only when running the app without IIS.

Para orientação sobre a configuração do Módulo do ASP.NET Core, consulte Módulo do ASP.NET Core.For ASP.NET Core Module configuration guidance, see Módulo do ASP.NET Core.

Para saber mais sobre hospedagem, confira Host no ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Configuração do aplicativoApplication configuration

Habilitar os componentes de IISIntegrationEnable the IISIntegration components

Um Program.cs típico chama CreateDefaultBuilder para começar a configurar um host que permite a integração com o 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)
        ...

Opções do IISIIS options

Modelo de hospedagem em processoIn-process hosting model

Para configurar as opções do Servidor IIS, inclua uma configuração de serviço para IISServerOptions em ConfigureServices.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. O exemplo a seguir desabilita AutomaticAuthentication:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
OpçãoOption PadrãoDefault ConfiguraçãoSetting
AutomaticAuthentication true Se true, o Servidor do IIS define o HttpContext.User autenticado pela Autenticação do Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Se false, o servidor fornecerá apenas uma identidade para HttpContext.User e responderá a desafios quando explicitamente solicitado pelo AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. A autenticação do Windows deve estar habilitada no IIS para que o AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para obter mais informações, veja Autenticação do Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Configura o nome de exibição mostrado aos usuários em páginas de logon.Sets the display name shown to users on login pages.
AllowSynchronousIO false Se a E/S síncrona é permitida para HttpContext.Request e HttpContext.Response.Whether synchronous IO is allowed for the HttpContext.Request and the HttpContext.Response.
MaxRequestBodySize 30000000 Obtém ou define o tamanho máximo do corpo da solicitação para o HttpRequest.Gets or sets the max request body size for the HttpRequest. Observe que o próprio IIS tem o limite maxAllowedContentLength que será processado antes de MaxRequestBodySize definido no IISServerOptions.Note that IIS itself has the limit maxAllowedContentLength which will be processed before the MaxRequestBodySize set in the IISServerOptions. Alterar MaxRequestBodySize não afetará maxAllowedContentLength.Changing the MaxRequestBodySize won't affect the maxAllowedContentLength. Para aumentar maxAllowedContentLength, adicione uma entrada em web.config para definir maxAllowedContentLength para um valor mais alto.To increase maxAllowedContentLength, add an entry in the web.config to set maxAllowedContentLength to a higher value. Para obter mais detalhes, confira Configuração.For more details, see Configuration.

Modelo de hospedagem de fora do processoOut-of-process hosting model

OpçãoOption PadrãoDefault ConfiguraçãoSetting
AutomaticAuthentication true Se true, o Servidor do IIS define o HttpContext.User autenticado pela Autenticação do Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Se false, o servidor fornecerá apenas uma identidade para HttpContext.User e responderá a desafios quando explicitamente solicitado pelo AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. A autenticação do Windows deve estar habilitada no IIS para que o AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para obter mais informações, veja Autenticação do Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Configura o nome de exibição mostrado aos usuários em páginas de logon.Sets the display name shown to users on login pages.

Modelo de hospedagem de fora do processoOut-of-process hosting model

Para configurar opções do IIS, inclua uma configuração de serviço para IISOptions em ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. O exemplo a seguir impede que o aplicativo preencha HttpContext.Connection.ClientCertificate:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OpçãoOption PadrãoDefault ConfiguraçãoSetting
AutomaticAuthentication true Se true, o middleware de integração do IIS define o HttpContext.User autenticado pela Autenticação do Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Se false, o middleware fornecerá apenas uma identidade para HttpContext.User e responderá a desafios quando explicitamente solicitado pelo AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. A autenticação do Windows deve estar habilitada no IIS para que o AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Saiba mais no tópico Autenticação do Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Configura o nome de exibição mostrado aos usuários em páginas de logon.Sets the display name shown to users on login pages.
ForwardClientCertificate true Se true e o cabeçalho da solicitação MS-ASPNETCORE-CLIENTCERT estiverem presentes, o HttpContext.Connection.ClientCertificate será populado.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Servidor proxy e cenários de balanceador de cargaProxy server and load balancer scenarios

O Middleware de integração do IIS, que configura o Middleware de cabeçalhos encaminhados, e o módulo do ASP.NET Core, são configurados para encaminhar o esquema (HTTP/HTTPS) e o endereço IP remoto de onde a solicitação foi originada.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. Configuração adicional pode ser necessária para aplicativos hospedados atrás de servidores proxy adicionais e balanceadores de carga.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Para obter mais informações, veja Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Arquivo web.configweb.config file

O arquivo web.config configura o Módulo do ASP.NET Core.The web.config file configures the ASP.NET Core Module. Criando, transformar e publicar o arquivo Web.config é tratado por um destino do MSBuild (_TransformWebConfig) quando o projeto é publicado.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Este destino está presente nos destinos do SDK da Web (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). O SDK é definido na parte superior do arquivo de projeto:The SDK is set at the top of the project file:

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

Se um arquivo Web. config não estiver presente no projeto, o arquivo será criado com os argumentos e processPath corretos para configurar o módulo ASP.NET Core e movido para a saída publicada.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 um arquivo web.config estiver presente no projeto, ele será transformado com o processPath e os argumentos corretos para configurar o Módulo do ASP.NET Core e será movido para o resultado publicado.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. A transformação não altera as definições de configuração do IIS no arquivo.The transformation doesn't modify IIS configuration settings in the file.

O arquivo web.config pode fornecer configurações adicionais do IIS que controlam módulos ativos do IIS.The web.config file may provide additional IIS configuration settings that control active IIS modules. Para saber mais sobre os módulos do IIS que podem processar solicitações com aplicativos do ASP.NET Core, veja o tópico Módulos do IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Para impedir que o SDK Web transforme o arquivo web.config, use a propriedade <IsTransformWebConfigDisabled> no arquivo do projeto:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

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

Ao impedir que o SDK Web transforme o arquivo, o processPath e os argumentos devem ser definidos manualmente pelo desenvolvedor.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Para obter mais informações, consulte Módulo do ASP.NET Core.For more information, see Módulo do ASP.NET Core.

Local do arquivo web.configweb.config file location

Para configurar o módulo ASP.NET Core corretamente, o arquivo Web. config deve estar presente no caminho raiz do conteúdo (normalmente o caminho base do aplicativo) do aplicativo implantado.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. Esse é o mesmo local que o caminho físico do site fornecido ao IIS.This is the same location as the website physical path provided to IIS. O arquivo web.config é necessário na raiz do aplicativo para habilitar a publicação de vários aplicativos usando a Implantação da Web.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Existem arquivos confidenciais no caminho físico do aplicativo, como <assembly>.runtimeconfig.json, <assembly>.xml (comentários da Documentação 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 o arquivo web.config estiver presente e o site for iniciado normalmente, o IIS não atenderá a esses arquivos confidenciais se eles forem solicitados.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Se o arquivo web.config estiver ausente, nomeado incorretamente ou se não for possível configurar o site para inicialização normal, o IIS poderá servir arquivos confidenciais publicamente.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

O arquivo Web. config deve estar presente na implantação o tempo todo, corretamente nomeado e ser capaz de configurar o site para inicialização normal. Nunca remova o arquivo Web. config de uma implantação de produção.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.

Transformação do Web.configTransform web.config

Se você precisar transformar o Web.config em publicação (por exemplo, definir variáveis ​​de ambiente com base na configuração, no perfil ou no ambiente), consulte Transformação do web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Transformação do web.config.

Configuração do IISIIS configuration

Sistemas operacionais do Windows ServerWindows Server operating systems

Habilite a função Servidor Web (IIS) e estabeleça serviços de função.Enable the Web Server (IIS) server role and establish role services.

  1. Use o assistente Adicionar Funções e Recursos por meio do menu Gerenciar ou do link no Gerenciador do Servidor.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. Na etapa Funções de Servidor, marque a caixa de Servidor Web (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    A função de Servidor Web IIS é selecionada na etapa Selecionar funções de servidor.

  2. Após a etapa Recursos, a etapa Serviços de função é carregada para o servidor Web (IIS).After the Features step, the Role services step loads for Web Server (IIS). Selecione os serviços de função do IIS desejados ou aceite os serviços de função padrão fornecidos.Select the IIS role services desired or accept the default role services provided.

    Os serviços de função padrão são selecionados na etapa Selecionar serviços de função.

    Autenticação do Windows (opcional)Windows Authentication (Optional)
    Para habilitar a Autenticação do Windows, expanda os nós a seguir: Servidor Web > Segurança.To enable Windows Authentication, expand the following nodes: Web Server > Security. Selecione o recurso Autenticação do Windows.Select the Windows Authentication feature. Saiba mais em Autenticação do Windows <windowsAuthentication> e Configurar autenticação do Windows.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    O WebSockets é compatível com o ASP.NET Core 1.1 ou posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar o WebSockets, expanda os nós a seguir: Servidor Web > Desenvolvimento de Aplicativos.To enable WebSockets, expand the following nodes: Web Server > Application Development. Selecione o recurso Protocolo WebSocket.Select the WebSocket Protocol feature. Para obter mais informações, consulte WebSockets.For more information, see WebSockets.

  3. Continue para a etapa Confirmação para instalar os serviços e a função de servidor Web.Proceed through the Confirmation step to install the web server role and services. Um comando server/IIS restart não será necessário após a instalação da função Servidor Web (IIS) .A server/IIS restart isn't required after installing the Web Server (IIS) role.

Sistemas operacionais Windows de área de trabalhoWindows desktop operating systems

Habilite o Console de Gerenciamento do IIS e os Serviços na World Wide Web.Enable the IIS Management Console and World Wide Web Services.

  1. Navegue para Painel de Controle > Programas > Programas e Recursos > Ativar ou desativar recursos do Windows (lado esquerdo da tela).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Abra o nó Serviços de Informações da Internet.Open the Internet Information Services node. Abra o nó Ferramentas de Gerenciamento da Web.Open the Web Management Tools node.

  3. Marque a caixa de Console de Gerenciamento do IIS.Check the box for IIS Management Console.

  4. Marque a caixa de Serviços na World Wide Web.Check the box for World Wide Web Services.

  5. Aceite os recursos padrão dos Serviços na World Wide Web ou personalize os recursos do IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Autenticação do Windows (opcional)Windows Authentication (Optional)
    Para habilitar a Autenticação do Windows, expanda os nós a seguir: Serviços World Wide Web > Segurança.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Selecione o recurso Autenticação do Windows.Select the Windows Authentication feature. Saiba mais em Autenticação do Windows <windowsAuthentication> e Configurar autenticação do Windows.For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    O WebSockets é compatível com o ASP.NET Core 1.1 ou posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar o WebSockets, expanda os nós a seguir: Serviços World Wide Web > Recursos de Desenvolvimento de Aplicativos.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Selecione o recurso Protocolo WebSocket.Select the WebSocket Protocol feature. Para obter mais informações, consulte WebSockets.For more information, see WebSockets.

  6. Se a instalação do IIS exigir uma reinicialização, reinicie o sistema.If the IIS installation requires a restart, restart the system.

O Console de Gerenciamento do IIS e os Serviços na World Wide Web estão selecionados em Recursos do Windows.

Instalar o pacote de hospedagem do .NET CoreInstall the .NET Core Hosting Bundle

Instale o pacote de hospedagem do .NET Core no sistema de hospedagem.Install the .NET Core Hosting Bundle on the hosting system. O pacote instala o Runtime .NET Core, a Biblioteca do .NET Core e o Módulo do ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. O módulo permite que aplicativos do ASP.NET Core sejam executados por trás do IIS.The module allows ASP.NET Core apps to run behind IIS.

Importante

Se o pacote de hospedagem for instalado antes do IIS, a instalação do pacote deverá ser reparada.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Execute o instalador do pacote de hospedagem novamente depois de instalar o IIS.Run the Hosting Bundle installer again after installing IIS.

Se o pacote de hospedagem for instalado após a instalação da versão de 64 bits (x64) do .NET Core, os SDKs poderão parecer estar ausentes (Nenhum SDK do .NET Core foi detectado).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). Para resolver o problema, consulte Solucionar problemas de projetos ASP.NET Core.To resolve the problem, see Solucionar problemas de projetos ASP.NET Core.

Download direto (versão atual)Direct download (current version)

Baixe o instalador usando o seguinte link:Download the installer using the following link:

Instalador de pacote de hospedagem do .NET Core atual (download direto)Current .NET Core Hosting Bundle installer (direct download)

Versões anteriores do instaladorEarlier versions of the installer

Para obter uma versão anterior do instalador:To obtain an earlier version of the installer:

  1. Navegue até os arquivos de downloads do .NET.Navigate to the .NET download archives.
  2. Em .NET Core, selecione a versão do .NET Core.Under .NET Core, select the .NET Core version.
  3. Na coluna Executar aplicativos – runtime, localize a linha da versão de runtime do .NET Core desejada.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Baixe o instalador usando o link Pacote de hospedagem e de runtime.Download the installer using the Runtime & Hosting Bundle link.

Aviso

Alguns instaladores contêm versões de lançamento que atingiram o EOL (fim da vida útil) e não têm mais suporte da Microsoft.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Para saber mais, confira a política de suporte.For more information, see the support policy.

Instalar o pacote de hospedagemInstall the Hosting Bundle

  1. Execute o instalador no servidor.Run the installer on the server. Os parâmetros a seguir estão disponíveis ao executar o instalador por meio de um shell de comando do administrador:The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1 – Ignorar a instalação do Módulo do ASP.NET Core.OPT_NO_ANCM=1 – Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1– Ignorar a instalação do runtime do .NET Core.OPT_NO_RUNTIME=1 – Skip installing the .NET Core runtime. Usado quando o servidor hospeda apenas implantações independentes (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1– Ignorar a instalação da Estrutura Compartilhada do ASP.NET (runtime do ASP.NET).OPT_NO_SHAREDFX=1 – Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Usado quando o servidor hospeda apenas implantações independentes (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1– Ignorar a instalação dos runtimes x86.OPT_NO_X86=1 – Skip installing x86 runtimes. Use esse parâmetro quando você souber que não hospedará aplicativos de 32 bits.Use this parameter when you know that you won't be hosting 32-bit apps. Se houver uma possibilidade de hospedar aplicativos de 32 bits e 64 bits no futuro, não use esse parâmetro e instale ambos os runtimes.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 – Desabilite a verificação para usar uma Configuração Compartilhada do IIS quando a configuração compartilhada (applicationHost.config) estiver no mesmo computador do que a instalação do 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. Disponível somente para instaladores do ASP.NET Core 2.2 ou Hosting Bundler posterior.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Para obter mais informações, consulte Módulo do ASP.NET Core.For more information, see Módulo do ASP.NET Core.
  2. Reinicie o sistema ou execute os seguintes comandos em um shell de comando:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    A reinicialização do IIS identifica uma alteração no CAMINHO do sistema, que é uma variável de ambiente, realizada pelo instalador.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

ASP.NET Core não adota o comportamento de roll-forward para versões de patch de pacotes de estrutura compartilhados.ASP.NET Core doesn't adopt roll-forward behavior for patch releases of shared framework packages. Depois de atualizar a estrutura compartilhada instalando um novo pacote de hospedagem, reinicie o sistema ou execute os seguintes comandos em um shell de comando:After upgrading the shared framework by installing a new hosting bundle, restart the system or execute the following commands in a command shell:

net stop was /y
net start w3svc

Não é necessário interromper manualmente os sites individuais no IIS ao instalar o pacote de hospedagem.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. Aplicativos hospedados (sites do IIS) são reiniciados quando o IIS é reiniciado.Hosted apps (IIS sites) restart when IIS restarts. Os aplicativos são iniciados novamente quando recebem sua primeira solicitação, incluindo a partir do módulo de inicialização do aplicativo.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core adota o comportamento de roll-forward para versões de patch de pacotes de estrutura compartilhados.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. Quando os aplicativos hospedados pelo IIS são reiniciados com o IIS, os aplicativos são carregados com as versões de patch mais recentes de seus pacotes referenciados quando recebem sua primeira solicitação.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. Se o IIS não for reiniciado, os aplicativos serão reiniciados e exibirão o comportamento de roll-forward quando seus processos de trabalho forem reciclados e receberem sua primeira solicitação.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

Observação

Para obter informações sobre a Configuração Compartilhada do IIS, consulte Módulo do ASP.NET Core com a Configuração Compartilhada do IIS.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Instalar a Implantação da Web durante a publicação com o Visual StudioInstall Web Deploy when publishing with Visual Studio

Ao implantar aplicativos para servidores com Implantação da Web, instale a versão mais recente da Implantação da Web no servidor.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Para instalar a Implantação da Web, use o WebPI (Web Platform Installer) ou obtenha um instalador diretamente no Centro de Download da Microsoft.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. O método preferencial é usar o WebPI.The preferred method is to use WebPI. O WebPI oferece uma instalação autônoma e uma configuração para provedores de hospedagem.WebPI offers a standalone setup and a configuration for hosting providers.

Criar o site do IISCreate the IIS site

  1. No sistema de hospedagem, crie uma pasta para conter arquivos e pastas publicados do aplicativo.On the hosting system, create a folder to contain the app's published folders and files. Em uma etapa a seguir, o caminho da pasta é fornecido ao IIS como o caminho físico para o aplicativo.In a following step, the folder's path is provided to IIS as the physical path to the app. Para obter mais informações sobre o layout de arquivo e a pasta de implantação de um aplicativo, confira Estrutura do diretório do ASP.NET Core.For more information on an app's deployment folder and file layout, see Estrutura do diretório do ASP.NET Core.

  2. No Gerenciador do IIS, abra o nó do servidor no painel Conexões.In IIS Manager, open the server's node in the Connections panel. Clique com botão direito do mouse na pasta Sites.Right-click the Sites folder. Selecione Adicionar Site no menu contextual.Select Add Website from the contextual menu.

  3. Forneça um Nome do site e defina o Caminho físico como a pasta de implantação do aplicativo.Provide a Site name and set the Physical path to the app's deployment folder. Forneça a configuração Associação e crie o site ao selecionar OK:Provide the Binding configuration and create the website by selecting OK:

    Forneça o Nome do site, o caminho físico e o Nome do host na etapa Adicionar Site.

    Aviso

    Associações de curinga de nível superior (http://*:80/ e http://+:80) não devem ser usadas.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Associações de curinga de nível superior podem abrir o aplicativo para vulnerabilidades de segurança.Top-level wildcard bindings can open up your app to security vulnerabilities. Isso se aplica a curingas fortes e fracos.This applies to both strong and weak wildcards. Use nomes de host explícitos em vez de curingas.Use explicit host names rather than wildcards. Associações de curinga de subdomínio (por exemplo, *.mysub.com) não têm esse risco de segurança se você controlar o domínio pai completo (em vez de *.com, o qual é vulnerável).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). Veja rfc7230 section-5.4 para obter mais informações.See rfc7230 section-5.4 for more information.

  4. No nó do servidor, selecione Pools de Aplicativos.Under the server's node, select Application Pools.

  5. Clique com o botão direito do mouse no pool de aplicativos do site e selecione Configurações Básicas no menu contextual.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. Na janela Editar Pool de Aplicativos, defina a versão do CLR do .NET como Sem Código Gerenciado:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Defina Sem Código Gerenciado para a versão do CLR do .NET.

    O ASP.NET Core é executado em um processo separado e gerencia o runtime.ASP.NET Core runs in a separate process and manages the runtime. O ASP.NET Core não depende do carregamento do CLR de Área de trabalho (CLR do .NET)—o Core Common Language Runtime (CoreCLR) para o .NET Core é inicializado para hospedar o aplicativo no processo de trabalho.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. Definir a versão do CLR do .NET como Sem Código Gerenciado é opcional, porém recomendado.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 ou posterior: para uma implantação autocontida de 64 bits (x64) que usa o modelo de hospedagem em processo, desabilite o pool de aplicativos para processos de 32 bits (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.

    Na barra lateral Ações do Gerenciador do IIS > Pools de Aplicativos, selecione Definir Padrões do Pool de Aplicativos ou Configurações Avançadas.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Localize Habilitar Aplicativos de 32 bits e defina o valor como False.Locate Enable 32-Bit Applications and set the value to False. Essa configuração não afeta os aplicativos implantados para a hospedagem fora do processo.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Confirme se a identidade do modelo de processo tem as permissões apropriadas.Confirm the process model identity has the proper permissions.

    Se você alterar a identidade padrão do pool de aplicativos (Modelo de Processo > Identidade) em ApplicationPoolIdentity para outra, verifique se a nova identidade tem as permissões necessárias para acessar a pasta do aplicativo, o banco de dados e outros recursos necessários.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. Por exemplo, o pool de aplicativos requer acesso de leitura e gravação às pastas nas quais o aplicativo lê e grava os arquivos.For example, the app pool requires read and write access to folders where the app reads and writes files.

Configuração de Autenticação do Windows (opcional)Windows Authentication configuration (Optional)
Para saber mais, veja Configurar a Autenticação do Windows.For more information, see Configure Windows authentication.

Implantar o aplicativoDeploy the app

Implante o aplicativo na pasta caminho físico do IIS que foi estabelecida na seção Criar o site do IIS.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Implantação da Web é o mecanismo recomendado para implantação, mas existem várias opções para mover o aplicativo da pasta publicar do projeto para a pasta de implantação do sistema de hospedagem.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Implantação da Web com o Visual StudioWeb Deploy with Visual Studio

Consulte o tópico Perfis de publicação do Visual Studio para implantação de aplicativos ASP.NET Core para saber como criar um perfil de publicação para uso com a Implantação da 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 o provedor de hospedagem fornecer um Perfil de Publicação ou o suporte para a criação de um, baixe o perfil e importe-o usando a caixa de diálogo Publicar do 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:

Página de caixa de diálogo Publicar

Implantação da Web fora do Visual StudioWeb Deploy outside of Visual Studio

Também é possível usar a Implantação da Web fora do Visual Studio na linha de comando.Web Deploy can also be used outside of Visual Studio from the command line. Para obter mais informações, consulte Ferramenta de Implantação da Web.For more information, see Web Deployment Tool.

Alternativas à Implantação da WebAlternatives to Web Deploy

Use qualquer um dos vários métodos para mover o aplicativo para o sistema host, como cópia manual, Xcopy, Robocopy ou PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Para obter mais informações sobre a implantação do ASP.NET Core no IIS, consulte a seção Recursos de implantação para administradores do IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Navegar no siteBrowse the website

Depois de implantar o aplicativo no sistema de hospedagem, faça uma solicitação para um dos pontos de extremidade públicos do aplicativo.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

No exemplo a seguir, o site está associado a um Nome do Host IIS de www.mysite.com na Porta 80.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. É feita uma solicitação para http://www.mysite.com:A request is made to http://www.mysite.com:

O navegador Microsoft Edge carregou a página de inicialização do IIS.

Arquivos de implantação bloqueadosLocked deployment files

Os arquivos na pasta de implantação são bloqueados quando o aplicativo está em execução.Files in the deployment folder are locked when the app is running. Os arquivos bloqueados não podem ser substituídos durante a implantação.Locked files can't be overwritten during deployment. Para liberar os arquivos bloqueados em uma implantação, interrompa o pool de aplicativos usando uma das abordagens a seguir:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Use a Implantação da Web e referencie Microsoft.NET.Sdk.Web no arquivo do projeto.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Um arquivo app_offline.htm é colocado na raiz do diretório de aplicativo da Web.An app_offline.htm file is placed at the root of the web app directory. Quando o arquivo estiver presente, o módulo do ASP.NET Core apenas desligará o aplicativo e servirá o arquivo app_offline.htm durante a implantação.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. Para obter mais informações, consulte Referência de configuração do módulo do ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

  • Manualmente interrompa o pool de aplicativos no Gerenciador do IIS no servidor.Manually stop the app pool in the IIS Manager on the server.

  • Use o PowerShell para descartar App_offline. htm (requer o PowerShell 5 ou posterior):Use PowerShell to drop app_offline.htm (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
    
    

Proteção de dadosData protection

A pilha Proteção de Dados do ASP.NET Core é usada por vários middlewares ASP.NET Core, incluindo aqueles usados na autenticação.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Mesmo se as APIs de proteção de dados não forem chamadas pelo código do usuário, a proteção de dados deverá ser configurada com um script de implantação ou no código do usuário para criar um repositório de chaves criptográfico persistente.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 a proteção de dados não estiver configurada, as chaves serão mantidas na memória e descartadas quando o aplicativo for reiniciado.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Se o token de autenticação for armazenado na memória quando o aplicativo for reiniciado:If the key ring is stored in memory when the app restarts:

  • Todos os tokens de autenticação baseados em cookies serão invalidados.All cookie-based authentication tokens are invalidated.
  • Os usuários precisam entrar novamente na próxima solicitação deles.Users are required to sign in again on their next request.
  • Todos os dados protegidos com o token de autenticação não poderão mais ser descriptografados.Any data protected with the key ring can no longer be decrypted. Isso pode incluir os tokens CSRF e cookies TempData do MVC do ASP.NET Core.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Para configurar a proteção de dados no IIS para persistir o token de autenticação, use uma das seguintes abordagens:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Criar chaves de registro de proteção de dadosCreate Data Protection Registry Keys

    As chaves de proteção de dados usadas pelos aplicativos ASP.NET Core são armazenadas no registro externo aos aplicativos.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Para persistir as chaves de determinado aplicativo, crie uma chave de registro para o pool de aplicativos.To persist the keys for a given app, create registry keys for the app pool.

    Para instalações autônomas do IIS não Web Farm, você pode usar o script Provision-AutoGenKeys.ps1 de Proteção de Dados do PowerShell para cada pool de aplicativos usado com um aplicativo 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. Esse script cria uma chave de registro no registro HKLM que é acessível apenas para a conta do processo de trabalho do pool de aplicativos do aplicativo.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. As chaves são criptografadas em repouso usando a DPAPI com uma chave para todo o computador.Keys are encrypted at rest using DPAPI with a machine-wide key.

    Em cenários de web farm, um aplicativo pode ser configurado para usar um caminho UNC para armazenar seu token de autenticação de proteção de dados.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. Por padrão, as chaves de proteção de dados não são criptografadas.By default, the data protection keys aren't encrypted. Garanta que as permissões de arquivo de o compartilhamento de rede sejam limitadas à conta do Windows na qual o aplicativo é executado.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Um certificado X509 pode ser usado para proteger chaves em repouso.An X509 certificate can be used to protect keys at rest. Considere um mecanismo para permitir aos usuários carregar certificados: coloque os certificados no repositório de certificados confiáveis do usuário e certifique-se de que eles estejam disponíveis em todos os computadores nos quais o aplicativo do usuário é executado.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. Veja Configurar a proteção de dados do ASP.NET Core para obter detalhes.See Configure ASP.NET Core Data Protection for details.

  • Configurar o pool de aplicativos do IIS para carregar o perfil do usuárioConfigure the IIS Application Pool to load the user profile

    Essa configuração está na seção Modelo de processo nas Configurações avançadas do pool de aplicativos.This setting is in the Process Model section under the Advanced Settings for the app pool. Defina Carregar Perfil do Usuário como True.Set Load User Profile to True. Quando definido como True, as chaves são armazenadas no diretório do perfil do usuário e protegidas usando DPAPI com uma chave específica para a conta de usuário.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. As chaves são persistidas para a pasta %LOCALAPPDATA%/ASP.NET/DataProtection-Keys.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    O atributo setProfileEnvironment do pool de aplicativos também deve ser habilitado.The app pool's setProfileEnvironment attribute must also be enabled. O valor padrão de setProfileEnvironment é true.The default value of setProfileEnvironment is true. Em alguns cenários (por exemplo, um SO Windows), setProfileEnvironment é definido como false.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Se as chaves não estiverem armazenadas no diretório do perfil do usuário como esperado:If keys aren't stored in the user profile directory as expected:

    1. navegue até a pasta %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Abra o arquivo applicationHost.config.Open the applicationHost.config file.
    3. Localize o elemento <system.applicationHost><applicationPools><applicationPoolDefaults><processModel>.Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Confirme se o atributo setProfileEnvironment não está presente, que tem como padrão o valor true, ou defina explicitamente o valor do atributo como true.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Use o sistema de arquivos como um repositório de tokens de autenticaçãoUse the file system as a key ring store

    Ajuste o código do aplicativo para usar o sistema de arquivos como um repositório de tokens de autenticação.Adjust the app code to use the file system as a key ring store. Use um certificado X509 para proteger o token de autenticação e verifique se ele é um certificado confiável.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Se o certificado for autoassinado, você deverá colocá-lo no repositório Raiz confiável.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Ao usar o IIS em uma web farm:When using IIS in a web farm:

    • Use um compartilhamento de arquivos que pode ser acessado por todos os computadores.Use a file share that all machines can access.
    • Implante um certificado X509 em cada computador.Deploy an X509 certificate to each machine. Configure a proteção de dados no código.Configure data protection in code.
  • Definir uma política para todo o computador para proteção de dadosSet a machine-wide policy for data protection

    O sistema de proteção de dados tem suporte limitado para a configuração da política de todo o computador padrão para todos os aplicativos que consomem as APIs de proteção de dados.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Para obter mais informações, consulte Proteção de dados do ASP.NET Core.For more information, see Proteção de dados do ASP.NET Core.

Diretórios VirtuaisVirtual Directories

Diretórios virtuais IIS não são compatíveis com aplicativos ASP.NET Core.IIS Virtual Directories aren't supported with ASP.NET Core apps. Um aplicativo pode ser hospedado como um subaplicativo.An app can be hosted as a sub-application.

SubaplicativosSub-applications

Um aplicativo ASP.NET Core pode ser hospedado como um subaplicativo IIS (sub-app).An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). A parte do caminho do subaplicativo se torna parte da URL raiz do aplicativo.The sub-app's path becomes part of the root app's URL.

Um subaplicativo não deve incluir o módulo do ASP.NET Core como um manipulador.A sub-app shouldn't include the ASP.NET Core Module as a handler. Se o módulo for adicionado como um manipulador em um arquivo web.config de um subaplicativo, quando tentar procurar o subaplicativo, você receberá um 500.19 Erro Interno do Servidor que referenciará o arquivo de configuração com falha.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.

O seguinte exemplo mostra um arquivo web.config publicado de um subaplicativo 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>

Ao hospedar um subaplicativo não ASP.NET Core abaixo de um aplicativo ASP.NET Core, remova explicitamente o manipulador herdado no arquivo web.config do subaplicativo: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>

Links de ativos estáticos dentro do subaplicativo devem usar a notação de sinal de til e barra (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. A notação de sinal de til e barra aciona um Auxiliar de Marca para preceder a base de caminho do subaplicativo ao link relativo renderizado.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Para um subaplicativo no /subapp_path, uma imagem vinculada com src="~/image.png" é renderizada como 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". O Middleware de Arquivo Estático do aplicativo raiz não processa a solicitação de arquivo estático.The root app's Static File Middleware doesn't process the static file request. A solicitação é processada pelo Middleware de Arquivo Estático do subaplicativo.The request is processed by the sub-app's Static File Middleware.

Se um atributo de ativo estático src for definido como um caminho absoluto (por exemplo, src="/image.png"), o link será renderizado sem a base de caminho do subaplicativo.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. O Middleware de Arquivos Estáticos do aplicativo raiz tenta fornecer o ativo do webroot da raiz do aplicativo, que resulta em uma resposta 404 – Não encontrado, a menos que o ativo estático esteja disponível no aplicativo raiz.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.

Para hospedar um aplicativo ASP.NET Core como um subaplicativo em outro aplicativo do ASP.NET Core:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Estabeleça um pool de aplicativos para o subaplicativo.Establish an app pool for the sub-app. Defina a versão do CLR do .NET como Sem Código Gerenciado porque o Core Common Language Runtime (CoreCLR) do .NET Core é inicializado para hospedar o aplicativo no processo de trabalho, não no CLR de Área de trabalho (CLR do .NET).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. Adicione o site raiz no Gerenciador do IIS com o subaplicativo em uma pasta no site raiz.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Clique com o botão direito do mouse na pasta do subaplicativo no Gerenciador do IIS e selecione Converter em aplicativo.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. Na caixa de diálogo Adicionar Aplicativo, use o botão Selecionar no Pool de Aplicativos para atribuir o pool de aplicativos que você criou ao subaplicativo.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. Selecione OK.Select OK.

A atribuição de um pool de aplicativos separado para o subaplicativo é um requisito ao usar o modelo de hospedagem em processo.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Para obter mais informações sobre o modelo de hospedagem em processo e como configurar o módulo ASP.NET Core, consulte Módulo do ASP.NET Core.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see Módulo do ASP.NET Core.

Configuração do IIS com web.configConfiguration of IIS with web.config

A configuração do IIS é influenciada pela seção <system.webServer> do web.config para cenários do IIS que são funcionais para aplicativos ASP.NET Core com o Módulo do 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. Por exemplo, a configuração do IIS é funcional para a compactação dinâmica.For example, IIS configuration is functional for dynamic compression. Se o IIS for configurado no nível do servidor para usar a compactação dinâmica, o elemento <urlCompression> no arquivo web.config do aplicativo pode desabilitá-la para um aplicativo do 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.

Para mais informações, consulte os seguintes tópicos:For more information, see the following topics:

Para definir variáveis de ambiente para aplicativos individuais executados em pools de aplicativos isolados (compatível com o IIS 10.0+ ou posterior), veja a seção comando AppCmd.exe do tópico Variáveis de ambiente <environmentVariables> na documentação de referência do 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.

Seções de configuração de web.configConfiguration sections of web.config

As seções de configuração de aplicativos ASP.NET 4.x em web.config não são usadas por aplicativos ASP.NET Core para configuração: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>

Aplicativos ASP.NET Core são configurados para usar outros provedores de configuração.ASP.NET Core apps are configured using other configuration providers. Para obter mais informações, consulte Configuração.For more information, see Configuration.

Pools de AplicativosApplication Pools

O isolamento do pool de aplicativos é determinado pelo modelo de hospedagem:App pool isolation is determined by the hosting model:

  • Hospedagem em processo – Aplicativos são necessários para execução em pools de aplicativos separados.In-process hosting – Apps are required to run in separate app pools.
  • Hospedagem fora do processo – É recomendável isolar os aplicativos uns dos outros, executando cada aplicativo em seu próprio pool de aplicativos.Out-of-process hosting – We recommend isolating the apps from each other by running each app in its own app pool.

A caixa de diálogo Adicionar Site do IIS usa como padrão um único pool de aplicativos por aplicativo.The IIS Add Website dialog defaults to a single app pool per app. Quando um Nome de site é fornecido, o texto é transferido automaticamente para a caixa de texto Pool de aplicativos.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Um novo pool de aplicativos é criado usando o nome do site quando você adicionar o site.A new app pool is created using the site name when the site is added.

Ao hospedar vários sites em um servidor, é recomendável isolar os aplicativos uns dos outros, executando cada aplicativo em seu próprio pool de aplicativo.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. A caixa de diálogo Adicionar Site do IIS usa como padrão essa configuração.The IIS Add Website dialog defaults to this configuration. Quando um Nome de site é fornecido, o texto é transferido automaticamente para a caixa de texto Pool de aplicativos.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Um novo pool de aplicativos é criado usando o nome do site quando você adicionar o site.A new app pool is created using the site name when the site is added.

Identidade do Pool de AplicativosApplication Pool Identity

Uma conta de identidade do pool de aplicativos permite executar um aplicativo em uma conta exclusiva sem a necessidade de criar e gerenciar domínios ou contas locais.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. No IIS 8.0 ou posterior, o WAS (Processo de trabalho do administrador) do IIS cria uma conta virtual com o nome do novo pool de aplicativos e executa os processos de trabalho do pool de aplicativos nesta conta por padrão.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. No Console de Gerenciamento do IIS, em Configurações avançadas do pool de aplicativos, verifique se a Identidade é definida para usar ApplicationPoolIdentity:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Caixa de diálogo Configurações avançadas do pool de aplicativos

O processo de gerenciamento do IIS cria um identificador seguro com o nome do pool de aplicativos no Sistema de segurança do Windows.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Os recursos podem ser protegidos usando essa identidade.Resources can be secured using this identity. No entanto, essa identidade não é uma conta de usuário real e não será mostrada no Console de Gerenciamento de Usuários do Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Se o processo de trabalho do IIS requerer acesso elevado ao aplicativo, modifique a ACL (lista de controle de acesso) do diretório que contém o aplicativo:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Abra o Windows Explorer e navegue para o diretório.Open Windows Explorer and navigate to the directory.

  2. Clique com o botão direito do mouse no diretório e selecione Propriedades.Right-click on the directory and select Properties.

  3. Na guia Segurança, selecione o botão Editar e, em seguida, no botão Adicionar.Under the Security tab, select the Edit button and then the Add button.

  4. Clique no botão Locais e verifique se o sistema está selecionado.Select the Locations button and make sure the system is selected.

  5. Insira IIS AppPool\<nome_pool_aplicativos> na área Inserir os nomes de objeto a serem selecionados.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Selecione o botão Verificar Nomes.Select the Check Names button. Para o DefaultAppPool, verifique os nomes usando IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Quando o botão Verificar Nomes é selecionado, um valor de DefaultAppPool é indicado na área de nomes de objeto.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Não é possível inserir o nome do pool de aplicativos diretamente na área de nomes de objeto.It isn't possible to enter the app pool name directly into the object names area. Use o formato IIS AppPool\<nome_pool_aplicativos> ao verificar o nome do objeto.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Selecione a caixa de diálogo de usuários ou grupos para a pasta do aplicativo: o nome do pool de aplicativos "DefaultAppPool" é anexado ao "IIS AppPool" na área de nomes de objeto antes de selecionar"Verificar Nomes".

  6. Selecione OK.Select OK.

    Selecione a caixa de diálogo de usuários ou grupos para a pasta do aplicativo: depois de selecionar "Verificar Nomes", o nome do objeto "DefaultAppPool" é mostrado na área de nomes de objeto.

  7. As permissões de leitura & execução devem ser concedidas por padrão.Read & execute permissions should be granted by default. Forneça permissões adicionais conforme necessário.Provide additional permissions as needed.

O acesso também pode ser concedido por meio de um prompt de comando usando a ferramenta ICACLS.Access can also be granted at a command prompt using the ICACLS tool. Usando o DefaultAppPool como exemplo, o comando a seguir é usado:Using the DefaultAppPool as an example, the following command is used:

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

Para saber mais, veja o tópico icacls.For more information, see the icacls topic.

Compatibilidade com HTTP/2HTTP/2 support

O HTTP/2 é compatível com ASP.NET Core nos seguintes cenários de implantação de IIS:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • Em processoIn-process
    • Windows Server 2016/Windows 10 ou posterior; IIS 10 ou posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Conexão TLS 1.2 ou posteriorTLS 1.2 or later connection
  • Fora do processoOut-of-process
    • Windows Server 2016/Windows 10 ou posterior; IIS 10 ou posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Conexões de servidor de borda voltadas para o público usam HTTP/2, mas a conexão de proxy reverso para o servidor 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.
    • Conexão TLS 1.2 ou posteriorTLS 1.2 or later connection

Para uma implantação em processo quando uma conexão HTTP/2 for estabelecida, o HttpRequest.Protocol relatará HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Para uma implantação fora de processo quando uma conexão HTTP/2 for estabelecida, o HttpRequest.Protocol relatará HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Para saber mais sobre os modelos de hospedagem em processo e fora de processo, confira Módulo do ASP.NET Core.For more information on the in-process and out-of-process hosting models, see Módulo do ASP.NET Core.

O HTTP/2 é compatível com implantações fora de processo que cumprem os seguintes requisitos básicos:HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016/Windows 10 ou posterior; IIS 10 ou posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
  • Conexões de servidor de borda voltadas para o público usam HTTP/2, mas a conexão de proxy reverso para o servidor 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.
  • Estrutura de destino: não se aplica a implantações fora de processo, visto que a conexão HTTP/2 é manipulada inteiramente pelo IIS.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • Conexão TLS 1.2 ou posteriorTLS 1.2 or later connection

Se uma conexão HTTP/2 for estabelecida, HttpRequest.Protocol relatará HTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

O HTTP/2 está habilitado por padrão.HTTP/2 is enabled by default. As conexões retornarão para HTTP/1.1 se uma conexão HTTP/2 não for estabelecida.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Para obter mais informações sobre a configuração de HTTP/2 com implantações do IIS, consulte HTTP/2 no IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Solicitações de simulação do CORSCORS preflight requests

Esta seção só se aplica a aplicativos ASP.NET Core com o .NET Framework como destino.This section only applies to ASP.NET Core apps that target the .NET Framework.

Para um aplicativo ASP.NET Core com o .NET Framework como destino, as solicitações OPTIONS não são passadas para o aplicativo por padrão no IIS.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Para saber como configurar os manipuladores do IIS do aplicativo no Web. config para passar solicitações de opções, consulte habilitar solicitações entre origens no ASP.NET Web API 2: como o CORS funciona.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.

Módulo de Inicialização de Aplicativo e Tempo Limite de OciosidadeApplication Initialization Module and Idle Timeout

Quando hospedado no IIS pela versão 2 do Módulo do ASP.NET Core:When hosted in IIS by the ASP.NET Core Module version 2:

Módulo de Inicialização de AplicativoApplication Initialization Module

Aplica-se a aplicativos hospedados em processo e fora de processo.Applies to apps hosted in-process and out-of-process.

Inicialização de Aplicativo IIS é um recurso do IIS que envia uma solicitação HTTP para o aplicativo quando o pool de aplicativos é iniciado ou reciclado.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. A solicitação dispara a inicialização do aplicativo.The request triggers the app to start. Por padrão, o IIS emite uma solicitação para a URL raiz do aplicativo (/) para inicializar o aplicativo (confira mais detalhes sobre a configuração nos recursos adicionais).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).

Confirme se o recurso da função Inicialização de Aplicativo do IIS está habilitado:Confirm that the IIS Application Initialization role feature in enabled:

No Windows 7 ou sistemas de área de trabalho posteriores, ao usar o IIS localmente:On Windows 7 or later desktop systems when using IIS locally:

  1. Navegue até Painel de Controle > Programas > Programas e Recursos > Ativar ou desativar recursos do Windows (lado esquerdo da tela).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Abra Serviços de Informações da Internet > Serviços da World Wide Web > Recursos de Desenvolvimento de Aplicativos.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Marque a caixa de seleção Inicialização de Aplicativo.Select the check box for Application Initialization.

No Windows Server 2008 R2 ou posterior:On Windows Server 2008 R2 or later:

  1. Abra o Assistente de Adição de Funções e Recursos.Open the Add Roles and Features Wizard.
  2. No painel Selecionar serviços de função, abra o nó Desenvolvimento de aplicativos.In the Select role services panel, open the Application Development node.
  3. Marque a caixa de seleção Inicialização de Aplicativo.Select the check box for Application Initialization.

Use quaisquer das abordagens a seguir para habilitar o Módulo de Inicialização do Aplicativo para o site:Use either of the following approaches to enable the Application Initialization Module for the site:

  • Usando o Gerenciador do IIS:Using IIS Manager:

    1. Selecione Pools de Aplicativos no painel Conexões.Select Application Pools in the Connections panel.
    2. Clique com o botão direito do mouse no pool de aplicativos do aplicativo na lista e selecione Configurações Avançadas.Right-click the app's app pool in the list and select Advanced Settings.
    3. O Modo de Inicialização padrão é OnDemand.The default Start Mode is OnDemand. Defina o Modo de Inicialização como AlwaysRunning.Set the Start Mode to AlwaysRunning. Selecione OK.Select OK.
    4. Abra o nó Sites no painel Conexões.Open the Sites node in the Connections panel.
    5. Clique com o botão direito do mouse no aplicativo e selecione Gerenciar Site > Configurações Avançadas.Right-click the app and select Manage Website > Advanced Settings.
    6. A configuração de Pré-carregamento Habilitado padrão é Falso.The default Preload Enabled setting is False. Defina Pré-carregamento Habilitado como Verdadeiro.Set Preload Enabled to True. Selecione OK.Select OK.
  • Usando o web.config, adicione o elemento <applicationInitialization> definindo doAppInitAfterRestart como true aos elementos <system.webServer> no arquivo web.config do aplicativo: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>
    

Tempo Limite de OciosidadeIdle Timeout

Só se aplica a aplicativos hospedados em processo.Only applies to apps hosted in-process.

Para impedir que o aplicativo fique ocioso, defina o tempo limite de ociosidade do pool de aplicativos, usando o Gerenciador do IIS:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Selecione Pools de Aplicativos no painel Conexões.Select Application Pools in the Connections panel.
  2. Clique com o botão direito do mouse no pool de aplicativos do aplicativo na lista e selecione Configurações Avançadas.Right-click the app's app pool in the list and select Advanced Settings.
  3. O Tempo Limite de Ociosidade (minutos) é de 20 minutos.The default Idle Time-out (minutes) is 20 minutes. Defina o Tempo Limite de Ociosidade (minutos) como 0 (zero).Set the Idle Time-out (minutes) to 0 (zero). Selecione OK.Select OK.
  4. Recicle o processo de trabalho.Recycle the worker process.

Para impedir que aplicativos hospedados fora de processo atinjam o tempo limite, use uma das seguintes abordagens:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Recursos adicionais do Módulo de Inicialização de Aplicativo e do Tempo Limite de OciosidadeApplication Initialization Module and Idle Timeout additional resources

Recursos de implantação para administradores do IISDeployment resources for IIS administrators

Conheça o ISS detalhadamente na documentação do IIS.Learn about IIS in-depth in the IIS documentation.
Documentação do ISSIIS documentation

Saiba mais sobre os modelos de implantação de aplicativos do .NET Core.Learn about .NET Core app deployment models.
Implantação de aplicativos do .NET Core.NET Core application deployment

Saiba mais sobre o módulo ASP.NET Core, incluindo diretrizes de configuração.Learn about the ASP.NET Core Module, including configuration guidance.
Módulo do ASP.NET Core

Saiba mais sobre a estrutura do diretório de aplicativos publicados do ASP.NET Core.Learn about the directory structure of published ASP.NET Core apps.
Estrutura de diretóriosDirectory structure

Descubra módulos ativos e inativos do IIS para aplicativos do ASP.NET Core e como gerenciar os módulos do IIS.Discover active and inactive IIS modules for ASP.NET Core apps and how to manage IIS modules.
Módulos do IISIIS modules

Saiba como diagnosticar problemas com as implantações do ISS dos aplicativos do ASP.NET Core.Learn how to diagnose problems with IIS deployments of ASP.NET Core apps.
Solução de problemasTroubleshoot

Distinga erros comuns ao hospedar aplicativos do ASP.NET Core no IIS.Distinguish common errors when hosting ASP.NET Core apps on IIS.
Referência de erros comuns para o Serviço de Aplicativo do Azure e o IISCommon errors reference for Azure App Service and IIS

Recursos adicionaisAdditional resources