Hospedagem fora do processo com o IIS e o ASP.NET Core

Como os aplicativos ASP.NET Core são executados em um processo separado do processo de trabalho do IIS, o Módulo do ASP.NET Core realiza o gerenciamento de processos. 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. 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).

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:

ASP.NET Core Module in the out-of-process hosting scenario

  1. As solicitações chegam da Web para o driver do HTTP.sys no modo kernel.
  2. O driver roteia as solicitações ao IIS na porta configurada do site. A porta configurada geralmente é 80 (HTTP) ou 443 (HTTPS).
  3. O módulo encaminha as solicitações para Kestrel em uma porta aleatória para o aplicativo. A porta aleatória não é a 80 nem a 443.

O Módulo do ASP.NET Core especifica a porta por meio de uma variável de ambiente na inicialização. A extensão UseIISIntegration configura o servidor a ser escutado em http://localhost:{PORT}. Outras verificações são executadas e as solicitações que não se originam do módulo são rejeitadas. O módulo não dá suporte ao encaminhamento de HTTPS. As solicitações são encaminhadas por HTTP, mesmo se forem recebidas pelo IIS por HTTPS.

Depois que o Kestrel coleta a solicitação do módulo, a solicitação é encaminhada ao pipeline do middleware do ASP.NET Core. O pipeline do middleware manipula a solicitação e a passa como uma instância de HttpContext para a lógica do aplicativo. O middleware adicionado pela integração do IIS atualiza o esquema, o IP remoto e pathbase para encaminhar a solicitação para o Kestrel. A resposta do aplicativo é retornada ao IIS, que a encaminha para o cliente HTTP que iniciou a solicitação.

Para obter diretrizes de configuração do Módulo do ASP.NET Core, consulte Módulo do ASP.NET Core (ANCM) para IIS.

Para saber mais sobre hospedagem, confira Host no ASP.NET Core.

Configuração de aplicativo

Habilitar os componentes de IISIntegration

Ao criar um host em CreateHostBuilder (Program.cs), chame CreateDefaultBuilder para habilitar a integração do IIS:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

Para saber mais sobre CreateDefaultBuilder, confira Host Genérico .NET no ASP.NET Core.

Modelo de hospedagem de fora do processo

Para configurar opções do IIS, inclua uma configuração de serviço para IISOptions em ConfigureServices. O exemplo a seguir impede que o aplicativo preencha HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Opção Padrão Configuração
AutomaticAuthentication true Se true, o middleware de integração do IIS define o HttpContext.User autenticado pela Autenticação do Windows. Se false, o middleware fornecerá apenas uma identidade para HttpContext.User e responderá a desafios quando explicitamente solicitado pelo AuthenticationScheme. A autenticação do Windows deve estar habilitada no IIS para que o AutomaticAuthentication funcione. Saiba mais no tópico Autenticação do Windows.
AuthenticationDisplayName null Configura o nome de exibição mostrado aos usuários em páginas de logon.
ForwardClientCertificate true Se true e o cabeçalho da solicitação MS-ASPNETCORE-CLIENTCERT estiverem presentes, o HttpContext.Connection.ClientCertificate será populado.

Servidor proxy e cenários de balanceador de carga

O Middleware de integração do IIS e o Módulo do ASP.NET Core estão configurados para encaminhar o:

  • Esquema (HTTP/HTTPS).
  • Endereço IP remoto em que a solicitação foi originada.

O Middleware de Integração do IIS configura o Middleware de Cabeçalhos Encaminhados.

Configuração adicional pode ser necessária para aplicativos hospedados atrás de servidores proxy adicionais e balanceadores de carga. Para obter mais informações, veja Configurar o ASP.NET Core para trabalhar com servidores proxy e balanceadores de carga.

Modelo de hospedagem de fora do processo

Para configurar um aplicativo para hospedagem fora do processo, defina o valor da propriedade <AspNetCoreHostingModel> como OutOfProcess no arquivo de projeto (.csproj):

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

A hospedagem em processo é definida com InProcess, que é o valor padrão.

O valor de <AspNetCoreHostingModel> não diferencia maiúsculas de minúsculas, portanto, inprocess e outofprocess são valores válidos.

O servidor Kestrel é usado, em vez do servidor HTTP do IIS (IISHttpServer).

Fora do processo, CreateDefaultBuilder chama UseIISIntegration para:

  • Configurar a porta e o caminho base nos quais o servidor deve escutar ao ser executado por trás do Módulo do ASP.NET Core.
  • Configurar o host para capturar erros de inicialização.

Nome do processo

Process.GetCurrentProcess().ProcessName relata w3wp/iisexpress (em processo) ou dotnet (fora do processo).

Muitos módulos nativos, como a Autenticação do Windows, permanecem ativos. Para saber mais sobre módulos do IIS ativos com o Módulo do ASP.NET Core, confira Módulos do IIS com o ASP.NET Core.

O Módulo do ASP.NET Core também pode:

  • Definir variáveis de ambiente para o processo de trabalho.
  • Registrar a saída StdOut no armazenamento de arquivo para a solução de problemas de inicialização.
  • Encaminhar tokens de autenticação do Windows.