Host Genérico do .NET no ASP.NET Core
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.
Importante
Estas informações referem-se a um produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.
Para a versão atual, consulte a versão .NET 9 deste artigo.
Este artigo fornece informações sobre como usar o host genérico do .NET no ASP.NET Core.
Os modelos ASP.NET Core criam um WebApplicationBuilder e WebApplication, que fornecem uma maneira simplificada de configurar e executar aplicativos Web sem uma classe Startup
. Para obter mais informações sobre WebApplicationBuilder
e WebApplication
, consulte Migrar do ASP.NET Core 5.0 para 6.0.
Para obter informações sobre como usar o Host Genérico do .NET em aplicativos de console, consulte Host Genérico do .NET.
Definição do anfitrião
Um host é um objeto que encapsula os recursos de uma aplicação, como:
- Injeção de dependência (DI)
- Registo
- Configuração
-
IHostedService
implementações
Quando um host é iniciado, ele chama IHostedService.StartAsync em cada implementação de IHostedService registada na coleção de serviços hospedados do contentor de serviço. Em um aplicativo Web, uma das implementações IHostedService
é um serviço Web que inicia uma implementação de servidor HTTP .
Incluir todos os recursos interdependentes do aplicativo em um único objeto permite o controle sobre a inicialização do aplicativo e o desligamento normal.
Configurar um anfitrião
O host é normalmente configurado, criado e executado por código no Program.cs
. O código a seguir cria um host com uma implementação IHostedService
adicionada ao contêiner DI:
await Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddHostedService<SampleHostedService>();
})
.Build()
.RunAsync();
Para uma carga de trabalho HTTP, chame ConfigureWebHostDefaults após CreateDefaultBuilder:
await Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build()
.RunAsync();
Configurações padrão do construtor
O método CreateDefaultBuilder:
- Define a raiz de conteúdo para o caminho retornado por GetCurrentDirectory.
- Carrega a configuração do host de:
- Variáveis de ambiente prefixadas com
DOTNET_
. - Argumentos de linha de comando.
- Variáveis de ambiente prefixadas com
- Carrega a configuração do aplicativo de:
-
appsettings.json
. -
appsettings.{Environment}.json
. -
Segredos de usuário quando o aplicativo é executado no ambiente
Development
. - Variáveis de ambiente.
- Argumentos de linha de comando.
-
- Adiciona os seguintes provedores de de log:
- Consola
- Depurar
- EventSource (Fonte de eventos)
- EventLog (somente quando executado no Windows)
- Permite validação de escopo e validação de dependência quando o ambiente está em Desenvolvimento.
O método ConfigureWebHostDefaults:
- Carrega a configuração do host a partir de variáveis de ambiente prefixadas com
ASPNETCORE_
. - Define Kestrel servidor como o servidor Web e o configura usando os provedores de configuração de hospedagem do aplicativo. Para obter as opções padrão do servidor Kestrel, consulte Configurar opções para o servidor Web ASP.NET Core Kestrel.
- Adiciona middleware de filtragem de anfitrião .
- Adiciona a middleware de Cabeçalhos Reencaminhados , se
ASPNETCORE_FORWARDEDHEADERS_ENABLED
for igual atrue
. - Permite a integração com o IIS. Para ver as opções padrão do IIS, consulte Hospedar ASP.NET Core no Windows com o IIS.
As seções Configurações de para todos os tipos de aplicativos e Configurações de para aplicativos Web mais adiante neste artigo mostram como substituir as configurações padrão do construtor.
Serviços fornecidos pelo quadro estrutural
Os seguintes serviços são registados automaticamente:
- IHostApplicationLifetime
- IHostLifetime
- IHostEnvironment / IWebHostEnvironment
Para obter mais informações sobre serviços fornecidos pela estrutura, consulte Injeção de Dependência no ASP.NET Core.
IHostApplicationLifetime
Injete o serviço IHostApplicationLifetime (anteriormente IApplicationLifetime
) em qualquer classe para lidar com tarefas pós-inicialização e de desligamento normal. Três propriedades na interface são tokens de cancelamento usados para registrar métodos de manipulador de eventos de início de aplicativo e parada de aplicativo. A interface também inclui um método StopApplication
, que permite que os aplicativos solicitem um desligamento normal.
Ao executar um desligamento controlado, o host:
- Aciona os manipuladores de eventos ApplicationStopping, o que permite que o aplicativo execute a lógica antes do início do processo de desligamento.
- Interrompe o servidor, que desativa novas conexões. O servidor aguarda a conclusão de solicitações em conexões existentes pelo tempo que o tempo limite de desligamento permitir. O servidor envia o cabeçalho de fechamento de conexão para solicitações adicionais em conexões existentes.
- Aciona os manipuladores de eventos ApplicationStopped, o que permite que o aplicativo execute a lógica após o desligamento do aplicativo.
O exemplo a seguir é uma implementação IHostedService
que registra IHostApplicationLifetime
manipuladores de eventos:
public class HostApplicationLifetimeEventsHostedService : IHostedService
{
private readonly IHostApplicationLifetime _hostApplicationLifetime;
public HostApplicationLifetimeEventsHostedService(
IHostApplicationLifetime hostApplicationLifetime)
=> _hostApplicationLifetime = hostApplicationLifetime;
public Task StartAsync(CancellationToken cancellationToken)
{
_hostApplicationLifetime.ApplicationStarted.Register(OnStarted);
_hostApplicationLifetime.ApplicationStopping.Register(OnStopping);
_hostApplicationLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
=> Task.CompletedTask;
private void OnStarted()
{
// ...
}
private void OnStopping()
{
// ...
}
private void OnStopped()
{
// ...
}
}
IHostLifetime
A implementação IHostLifetime controla quando o host é iniciado e quando ele para. É utilizada a última implementação registada.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
é a implementação padrão do IHostLifetime
.
ConsoleLifetime
:
- Ouve Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM e chama StopApplication para iniciar o processo de desligamento.
- Desbloqueia extensões como RunAsync e WaitForShutdownAsync.
IHostEnvironment
Injete o serviço IHostEnvironment em uma classe para obter informações sobre as seguintes configurações:
Os aplicativos Web implementam a interface IWebHostEnvironment
, que herda IHostEnvironment
e adiciona o WebRootPath.
Configuração do host
A configuração do host é usada para as propriedades da implementação do IHostEnvironment.
A configuração do host está disponível em HostBuilderContext.Configuration dentro de ConfigureAppConfiguration. Após ConfigureAppConfiguration
, HostBuilderContext.Configuration
é substituído pela configuração do aplicativo.
Para adicionar a configuração do host, chame ConfigureHostConfiguration no IHostBuilder
.
ConfigureHostConfiguration
pode ser chamado várias vezes com resultados aditivos. O host usa qualquer opção que defina um valor por último em uma determinada chave.
O provedor de variáveis de ambiente com o prefixo DOTNET_
e argumentos de linha de comando é incluído por CreateDefaultBuilder
. Para aplicativos Web, o provedor de variável de ambiente com prefixo ASPNETCORE_
é adicionado. O prefixo é removido quando as variáveis de ambiente são lidas. Por exemplo, o valor da variável de ambiente para ASPNETCORE_ENVIRONMENT
torna-se o valor de configuração do host para a chave environment
.
O exemplo a seguir cria a configuração do host:
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(hostConfig =>
{
hostConfig.SetBasePath(Directory.GetCurrentDirectory());
hostConfig.AddJsonFile("hostsettings.json", optional: true);
hostConfig.AddEnvironmentVariables(prefix: "PREFIX_");
hostConfig.AddCommandLine(args);
});
Configuração do aplicativo
A configuração do aplicativo é criada chamando ConfigureAppConfiguration no IHostBuilder
.
ConfigureAppConfiguration
pode ser chamado várias vezes com resultados aditivos. O aplicativo usa qualquer opção que defina um valor por último em uma determinada chave.
A configuração criada pela ConfigureAppConfiguration
está disponível em HostBuilderContext.Configuration para operações subsequentes e como um serviço da DI. A configuração do host também é adicionada à configuração do aplicativo.
Para obter mais informações, consulte Configuração no ASP.NET Core.
Configurações para todos os tipos de aplicativos
Esta seção lista as configurações de host que se aplicam a cargas de trabalho HTTP e não HTTP. Por padrão, as variáveis de ambiente usadas para definir essas configurações podem ter um prefixo DOTNET_
ou ASPNETCORE_
, que aparecem na lista de configurações a seguir como o espaço reservado {PREFIX_}
. Para obter mais informações, consulte a seção Configurações padrão do construtor e Configuração: variáveis de ambiente.
Nome do aplicativo
A propriedade IHostEnvironment.ApplicationName é definida a partir da configuração do host durante a construção do host.
Principais: applicationName
Tipo: string
padrão: o nome do assembly que contém o ponto de entrada da aplicação.
Variável Ambiente: {PREFIX_}APPLICATIONNAME
Para definir esse valor, use a variável de ambiente.
ContentRoot
A propriedade IHostEnvironment.ContentRootPath determina onde o host começa a procurar arquivos de conteúdo. Se o caminho não existir, o host não será iniciado.
Tecla: contentRoot
Tipo: string
padrão: a pasta onde reside o assembly do aplicativo.
Variável de Ambiente: {PREFIX_}CONTENTROOT
Para definir esse valor, use a variável de ambiente ou chame UseContentRoot
em IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("/path/to/content/root")
// ...
Para mais informações, consulte:
Nome_do_ambiente
A propriedade IHostEnvironment.EnvironmentName pode ser definida como qualquer valor. Os valores definidos pela estrutura incluem Development
, Staging
e Production
. Valores não são sensíveis a maiúsculas e minúsculas.
Principais: environment
Tipo: string
Default: Production
Variável Ambiente: {PREFIX_}ENVIRONMENT
Para definir esse valor, use a variável de ambiente ou chame UseEnvironment
em IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
// ...
Tempo de Espera para Encerramento
HostOptions.ShutdownTimeout define o tempo limite para StopAsync. O valor padrão é 30 segundos. Durante o período de tempo limite, o anfitrião:
- Os gatilhos IHostApplicationLifetime.ApplicationStopping.
- Tentativas de parar serviços hospedados, registrando erros para serviços que não conseguem parar.
Se o período de tempo limite expirar antes de todos os serviços hospedados pararem, todos os serviços ativos restantes serão interrompidos quando o aplicativo for desligado. Os serviços param mesmo que não tenham terminado o processamento. Se os serviços exigirem mais tempo para parar, aumente o tempo limite.
Principais: shutdownTimeoutSeconds
Tipo: int
padrão: 30 segundos
Variável Ambiente: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Para definir esse valor, use a variável de ambiente ou configure HostOptions
. O exemplo a seguir define o tempo limite para 20 segundos:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(options =>
{
options.ShutdownTimeout = TimeSpan.FromSeconds(20);
});
});
Desativar recarga da configuração da aplicação quando ocorrer alterações.
Por padrão, appsettings.json
e appsettings.{Environment}.json
são recarregados quando o arquivo é alterado. Para desativar esse comportamento de recarga no ASP.NET Core 5.0 ou posterior, defina a tecla hostBuilder:reloadConfigOnChange
como false
.
Principais: hostBuilder:reloadConfigOnChange
Tipo: bool
(true
ou false
)
padrão : true
Argumento de linha de comando: hostBuilder:reloadConfigOnChange
Variável Ambiente: {PREFIX_}hostBuilder:reloadConfigOnChange
Advertência
O separador de dois pontos (:
) não funciona com as chaves hierárquicas das variáveis de ambiente em todas as plataformas. Para obter mais informações, consulte variáveis de ambiente.
Configurações para aplicativos Web
Algumas configurações de host se aplicam apenas a cargas de trabalho HTTP. Por padrão, as variáveis de ambiente usadas para definir essas configurações podem ter um prefixo DOTNET_
ou ASPNETCORE_
, que aparecem na lista de configurações a seguir como o espaço reservado {PREFIX_}
.
Métodos de extensão em IWebHostBuilder
estão disponíveis para essas configurações. Exemplos de código que mostram como chamar os métodos de extensão assumem webBuilder
é uma instância de IWebHostBuilder
, como no exemplo a seguir:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// ...
});
CapturarErrosDeInicialização
Quando false
, erros durante a inicialização resultam na saída do host. Quando true
, o host captura exceções durante a inicialização e tenta iniciar o servidor.
Principais: captureStartupErrors
Tipo: bool
(true
/1
ou false
/0
)
padrão: o padrão é false
a menos que o aplicativo seja executado com Kestrel atrás do IIS, onde o padrão é true
.
Variável Ambiente: {PREFIX_}CAPTURESTARTUPERRORS
Para definir esse valor, use a configuração ou chame CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Erros Detalhados
Quando ativado, ou quando o ambiente é Development
, o aplicativo captura erros detalhados.
Principais: detailedErrors
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável de Ambiente: {PREFIX_}DETAILEDERRORS
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
Uma cadeia de caracteres delimitada por ponto-e-vírgula contendo assemblies de inicialização a carregar no arranque. Embora o valor de configuração seja predefinido para uma string vazia, os assemblies de inicialização de hospedagem incluem sempre o assembly da aplicação. Quando os assemblies de inicialização de hospedagem são fornecidos, eles são adicionados ao assembly do aplicativo para serem carregados quando o aplicativo configura os seus serviços comuns durante a inicialização.
Principais: hostingStartupAssemblies
Tipo: string
Default: String vazia
Variável Ambiente: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
Uma cadeia de caracteres delimitada por ponto e vírgula que especifica as assemblies de inicialização a excluir no arranque.
Key: hostingStartupExcludeAssemblies
Tipo: string
Default: String vazia
Variável de Ambiente: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(
WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS_Port
Defina a porta HTTPS para redirecionar se você obtiver uma conexão não-HTTPS. Usado para impor HTTPS . Essa configuração não faz com que o servidor escute na porta especificada. Ou seja, é possível redirecionar acidentalmente solicitações para uma porta não utilizada.
Key: https_port
Tipo: string
Padrão: Um valor padrão não está definido.
Variável Ambiente: {PREFIX_}HTTPS_PORT
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting("https_port", "8080");
Portas_HTTPS
As portas para escutar conexões HTTPS.
Principais: https_ports
Tipo: string
padrão: um valor padrão não está definido.
Variável de Ambiente: {PREFIX_}HTTPS_PORTS
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting("https_ports", "8080");
PreferHostingUrls
Indica se o host deve escutar as URLs configuradas com o IWebHostBuilder
em vez dessas URLs configuradas com a implementação IServer
.
Principais: preferHostingUrls
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável de Ambiente: {PREFIX_}PREFERHOSTINGURLS
Para definir esse valor, use a variável de ambiente ou chame PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Previna o carregamento automático de assemblies de arranque de hospedagem, incluindo aqueles configurados pelo assembly da aplicação. Para obter mais informações, consulte Usar assemblies de inicialização de hospedagem no ASP.NET Core.
Principais: preventHostingStartup
Tipo: bool
(true
/1
ou false
/0
)
Default: false
Variável de Ambiente: {PREFIX_}PREVENTHOSTINGSTARTUP
Para definir esse valor, use a variável de ambiente ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
A montagem para procurar a classe Startup
.
Principais: startupAssembly
Tipo: string
padrão: a montagem do aplicativo
Variável Ambiente: {PREFIX_}STARTUPASSEMBLY
Para definir esse valor, use a variável de ambiente ou chame UseStartup
.
UseStartup
pode ter um nome de assembly (string
) ou um tipo (TStartup
). Se vários métodos UseStartup
forem chamados, o último terá precedência.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
SuprimirMensagensDeEstado
Quando ativado, suprime mensagens de status de inicialização de hospedagem.
Principais: suppressStatusMessages
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável Ambiente: {PREFIX_}SUPPRESSSTATUSMESSAGES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URLs
Uma lista delimitada por ponto-e-vírgula de endereços IP ou endereços de host com portas e protocolos que o servidor deve escutar para solicitações. Por exemplo, http://localhost:123
. Use "*" para indicar que o servidor deve escutar solicitações em qualquer endereço IP ou nome de host usando a porta e o protocolo especificados (por exemplo, http://*:5000
). O protocolo (http://
ou https://
) deve ser incluído em cada URL. Os formatos suportados variam entre servidores.
Principais: urls
Tipo: string
padrão: http://localhost:5000
e https://localhost:5001
Variável de Ambiente: {PREFIX_}URLS
Para definir esse valor, use a variável de ambiente ou chame UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel tem a sua própria API de configuração de endpoint. Para obter mais informações, consulte Configurar endpoints para o servidor Web ASP.NET Core Kestrel.
Raiz da Web
A propriedade IWebHostEnvironment.WebRootPath determina o caminho relativo para os ativos estáticos do aplicativo. Se o caminho não existir, um provedor de arquivos no-op será usado.
Principais: webroot
Tipo: string
Default: O padrão é wwwroot
. O caminho para {content root}/wwwroot deve existir.
Variável de Ambiente: {PREFIX_}WEBROOT
Para definir esse valor, use a variável de ambiente ou chame UseWebRoot
em IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Para mais informações, consulte:
- Fundamentos: Raiz da Web
- RaizDeConteúdo
Gerenciar o tempo de vida do host
Chame métodos na implementação IHost construída para iniciar e parar a aplicação. Esses métodos afetam todas as implementações de IHostedService registradas no contêiner de serviço.
A diferença entre os métodos Run*
e Start*
é que os métodos Run*
aguardam a conclusão do host antes de retornar, enquanto os métodos Start*
retornam imediatamente. Os métodos Run*
são normalmente usados em aplicativos de console, enquanto os métodos Start*
são normalmente usados em serviços de longa execução.
Correr
Run executa o aplicativo e bloqueia o thread de chamada até que o host seja desligado.
RunAsync
RunAsync executa a aplicação e retorna um Task que se completa quando o token de cancelamento ou encerramento é acionado.
RunConsoleAsync
RunConsoleAsync habilita o suporte ao console, cria e inicia o host e aguarda Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM para desligar.
Início
Start inicia o host de forma síncrona.
StartAsync
StartAsync inicia o host e retorna um Task que é finalizado quando o token de cancelamento ou o encerramento é ativado.
WaitForStartAsync é chamado no início de StartAsync
, que espera até que esteja completo antes de continuar. Este método pode ser usado para atrasar a inicialização até ser sinalizado por um evento externo.
StopAsync
StopAsync tenta parar o host dentro do tempo limite fornecido.
WaitForShutdown
WaitForShutdown bloqueia o thread de chamada até que o desligamento seja acionado pelo IHostLifetime, como por meio de Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM.
WaitForShutdownAsync
WaitForShutdownAsync retorna um Task que é concluído quando o desligamento é acionado através do token fornecido e chama StopAsync.
Os modelos ASP.NET Core criam um Host Genérico do .NET Core (HostBuilder).
Este artigo fornece informações sobre como usar o .NET Generic Host no ASP.NET Core. Para obter informações sobre como usar o .NET Generic Host em aplicativos de console, consulte .NET Generic Host.
Definição do anfitrião
Um host do é um objeto que encapsula os recursos de um aplicativo, como:
- Injeção de dependência (DI)
- Registo
- Configuração
-
IHostedService
implementações
Quando um host é iniciado, ele chama IHostedService.StartAsync em cada implementação de IHostedService registrada na coleção de serviços hospedados do contêiner de serviço. Em um aplicativo Web, uma das implementações IHostedService
é um serviço Web que inicia uma implementação de servidor HTTP .
A principal razão para incluir todos os recursos interdependentes do aplicativo em um objeto é o gerenciamento do tempo de vida: controle sobre a inicialização do aplicativo e desligamento normal.
Configurar um anfitrião
O host é normalmente configurado, criado e executado por código na classe Program
. O método Main
:
- Chama um método
CreateHostBuilder
para criar e configurar um objeto construtor. - Chama os métodos
Build
eRun
no objeto construtor.
Os modelos da Web ASP.NET Core geram o seguinte código para criar um host:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
O código a seguir cria uma carga de trabalho não-HTTP com uma implementação IHostedService
adicionada ao contêiner DI.
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
Para uma carga de trabalho HTTP, o método Main
é o mesmo, mas CreateHostBuilder
chama ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Se o aplicativo usa o Entity Framework Core, não altere o nome ou a assinatura do método CreateHostBuilder
. As ferramentas Entity Framework Core esperam encontrar um método CreateHostBuilder
que configure o host sem executar a aplicação. Para obter mais informações, consulte Criação de DbContext em tempo de design.
Configurações padrão do construtor
O método CreateDefaultBuilder:
- Define a raiz de conteúdo para o caminho retornado por GetCurrentDirectory.
- Carrega a configuração do host de:
- Variáveis de ambiente prefixadas com
DOTNET_
. - Argumentos de linha de comando.
- Variáveis de ambiente prefixadas com
- Carrega a configuração do aplicativo de:
-
appsettings.json
. -
appsettings.{Environment}.json
. -
Segredos de usuário quando o aplicativo é executado no ambiente
Development
. - Variáveis de ambiente.
- Argumentos de linha de comando.
-
- Adiciona os seguintes provedores de de log:
- Consola
- Depurar
- Fonte de eventos
- EventLog (somente quando executado no Windows)
- Permite a validação de escopo e a validação de dependência quando o ambiente é Desenvolvimento.
O método ConfigureWebHostDefaults:
- Carrega a configuração do host a partir de variáveis de ambiente prefixadas com
ASPNETCORE_
. - Define Kestrel servidor como o servidor Web e o configura usando os provedores de configuração de hospedagem do aplicativo. Para obter as opções padrão do servidor Kestrel, consulte Configurar opções para o servidor Web ASP.NET Core Kestrel.
- Introduz middleware de Filtragem de Host .
- Adiciona o middleware de Cabeçalhos Encaminhados se
ASPNETCORE_FORWARDEDHEADERS_ENABLED
for igual atrue
. - Permite a integração com o IIS. Para obter as opções padrão do IIS, consulte Host ASP.NET Core em Windows com o IIS.
As seções Configurações de para todos os tipos de aplicativos e Configurações de para aplicativos Web mais adiante neste artigo mostram como substituir as configurações padrão do construtor.
Serviços fornecidos pelo framework
Os seguintes serviços são registados automaticamente:
Para obter mais informações sobre serviços fornecidos pelo framework, consulte Injeção de Dependência no ASP.NET Core.
IHostApplicationLifetime
Injete o serviço IHostApplicationLifetime (anteriormente IApplicationLifetime
) em qualquer classe para lidar com tarefas pós-inicialização e de desligamento normal. Três propriedades na interface são tokens de cancelamento usados para registrar métodos de manipulador de eventos de início de aplicativo e parada de aplicativo. A interface também inclui um método StopApplication
.
O exemplo a seguir é uma implementação IHostedService
que registra IHostApplicationLifetime
eventos:
internal class LifetimeEventsHostedService : IHostedService
{
private readonly ILogger _logger;
private readonly IHostApplicationLifetime _appLifetime;
public LifetimeEventsHostedService(
ILogger<LifetimeEventsHostedService> logger,
IHostApplicationLifetime appLifetime)
{
_logger = logger;
_appLifetime = appLifetime;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_appLifetime.ApplicationStarted.Register(OnStarted);
_appLifetime.ApplicationStopping.Register(OnStopping);
_appLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
private void OnStarted()
{
_logger.LogInformation("OnStarted has been called.");
// Perform post-startup activities here
}
private void OnStopping()
{
_logger.LogInformation("OnStopping has been called.");
// Perform on-stopping activities here
}
private void OnStopped()
{
_logger.LogInformation("OnStopped has been called.");
// Perform post-stopped activities here
}
}
IHostLifetime
A implementação IHostLifetime controla quando o host é iniciado e quando ele para. É utilizada a última implementação registada.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
é a implementação padrão de IHostLifetime
.
ConsoleLifetime
:
- Ouve Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM e chama StopApplication para iniciar o processo de desligamento.
- Desbloqueia extensões como RunAsync e WaitForShutdownAsync.
IHostEnvironment
Injete o serviço IHostEnvironment em uma classe para obter informações sobre as seguintes configurações:
- ApplicationName
- EnvironmentName
- ContentRootPath
Os aplicativos Web implementam a interface IWebHostEnvironment
, que herda IHostEnvironment
e adiciona o WebRootPath.
Configuração do host
A configuração do host é usada para as propriedades da implementação do IHostEnvironment.
A configuração do host está disponível em HostBuilderContext.Configuration dentro de ConfigureAppConfiguration. Após ConfigureAppConfiguration
, HostBuilderContext.Configuration
é substituído pela configuração do aplicativo.
Para adicionar a configuração do host, chame ConfigureHostConfiguration no IHostBuilder
.
ConfigureHostConfiguration
pode ser chamado várias vezes com resultados aditivos. O host usa qualquer opção que defina um valor por último em uma determinada chave.
O provedor de variável de ambiente com prefixo DOTNET_
e argumentos de linha de comando é incluído por CreateDefaultBuilder
. Para aplicativos Web, o provedor de variável de ambiente com prefixo ASPNETCORE_
é adicionado. O prefixo é removido quando as variáveis de ambiente são lidas. Por exemplo, o valor da variável de ambiente para ASPNETCORE_ENVIRONMENT
torna-se o valor de configuração do host para a chave environment
.
O exemplo a seguir cria a configuração do host:
// using Microsoft.Extensions.Configuration;
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
});
Configuração do aplicativo
A configuração do aplicativo é criada chamando ConfigureAppConfiguration no IHostBuilder
.
ConfigureAppConfiguration
pode ser chamado várias vezes com resultados aditivos. O aplicativo usa qualquer opção que defina um valor por último em uma determinada chave.
A configuração criada pela ConfigureAppConfiguration
está disponível em HostBuilderContext.Configuration para operações subsequentes e como um serviço da DI. A configuração do host também é adicionada à configuração do aplicativo.
Para obter mais informações, consulte Configuração no ASP.NET Core.
Configurações para todos os tipos de aplicativos
Esta seção lista as configurações de host que se aplicam a cargas de trabalho HTTP e não HTTP. Por padrão, as variáveis de ambiente usadas para definir essas configurações podem ter um prefixo DOTNET_
ou ASPNETCORE_
, que aparecem na lista de configurações a seguir como o espaço reservado {PREFIX_}
. Para obter mais informações, consulte a seção Configurações padrão do construtor e Configuração: variáveis de ambiente.
Nome do aplicativo
A propriedade IHostEnvironment.ApplicationName é definida a partir da configuração do host durante a construção do host.
Tecla: applicationName
Tipo: string
Default: o nome do assembly que contém o ponto de entrada da aplicação.
Variável de ambiente: {PREFIX_}APPLICATIONNAME
Para definir esse valor, use a variável de ambiente.
ContentRoot
A propriedade IHostEnvironment.ContentRootPath determina onde o host começa a procurar arquivos de conteúdo. Se o caminho não existir, o host não será iniciado.
Tecla: contentRoot
Tipo: string
padrão: a pasta onde o assembly do aplicativo reside.
Variável Ambiente: {PREFIX_}CONTENTROOT
Para definir esse valor, use a variável de ambiente ou chame UseContentRoot
em IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Para mais informações, consulte:
Nome_do_ambiente
A propriedade IHostEnvironment.EnvironmentName pode ser definida como qualquer valor. Os valores definidos pela estrutura incluem Development
, Staging
e Production
. Os valores não diferenciam maiúsculas de minúsculas.
Tecla: environment
Tipo: string
padrão : Production
Variável de Ambiente: {PREFIX_}ENVIRONMENT
Para definir esse valor, use a variável de ambiente ou chame UseEnvironment
em IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
Tempo de Encerramento
HostOptions.ShutdownTimeout define o tempo limite para StopAsync. O valor padrão é cinco segundos. Durante o intervalo, o anfitrião:
- Os gatilhos IHostApplicationLifetime.ApplicationStopping.
- Tentativas de parar serviços hospedados, registando erros para serviços que não conseguem ser interrompidos.
Se o período de tempo limite expirar antes de todos os serviços hospedados pararem, todos os serviços ativos restantes serão interrompidos quando o aplicativo for desligado. Os serviços param mesmo que não tenham terminado o processamento. Se os serviços exigirem mais tempo para parar, aumente o tempo limite.
Principais: shutdownTimeoutSeconds
Tipo: int
padrão: 5 segundos
Variável Ambiente: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Para definir esse valor, use a variável de ambiente ou configure HostOptions
. O exemplo a seguir define o tempo limite para 20 segundos:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Desativar a recarga da configuração da aplicação quando houver alterações
Por padrão, appsettings.json
e appsettings.{Environment}.json
são recarregados quando o arquivo é alterado. Para desativar esse comportamento de recarga no ASP.NET Core 5.0 ou posterior, defina a tecla hostBuilder:reloadConfigOnChange
como false
.
Principais: hostBuilder:reloadConfigOnChange
Tipo: bool
(true
ou false
)
padrão : true
Argumento de linha de comando: hostBuilder:reloadConfigOnChange
Variável de Ambiente: {PREFIX_}hostBuilder:reloadConfigOnChange
Advertência
O separador de dois pontos (:
) não funciona com chaves hierárquicas de variáveis de sistema em todas as plataformas. Para obter mais informações, consulte variáveis de ambiente.
Configurações para aplicativos Web
Algumas configurações de host se aplicam apenas a cargas de trabalho HTTP. Por padrão, as variáveis de ambiente usadas para definir essas configurações podem ter um prefixo DOTNET_
ou ASPNETCORE_
, que aparecem na lista de configurações a seguir como o espaço reservado {PREFIX_}
.
Métodos de extensão em IWebHostBuilder
estão disponíveis para essas configurações. Exemplos de código que mostram como chamar os métodos de extensão assumem webBuilder
é uma instância de IWebHostBuilder
, como no exemplo a seguir:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
CapturarErrosDeInicialização
Quando false
, erros durante a inicialização resultam na saída do host. Quando true
, o host captura exceções durante a inicialização e tenta iniciar o servidor.
Principais: captureStartupErrors
Tipo: bool
(true
/1
ou false
/0
)
padrão: o padrão é false
a menos que o aplicativo seja executado com Kestrel atrás do IIS, onde o padrão é true
.
Variável de Ambiente: {PREFIX_}CAPTURESTARTUPERRORS
Para definir esse valor, use a configuração ou chame CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Erros Detalhados
Quando ativado, ou quando o ambiente é Development
, o aplicativo captura erros detalhados.
Tecla: detailedErrors
Tipo: bool
(true
/1
ou false
/0
)
Padrão: false
Variável Ambiente: {PREFIX_}DETAILEDERRORS
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
Uma cadeia de caracteres delimitada por ponto e vírgula com assemblies de inicialização de hospedagem para carregar no arranque. Embora o valor de configuração padrão seja uma string vazia, os assemblies de inicialização de hospedagem sempre incluem o assembly da aplicação. Quando assemblies de inicialização de hospedagem são fornecidos, eles são adicionados ao assembly do aplicativo para carregamento quando o aplicativo cria seus serviços comuns durante a inicialização.
Key: hostingStartupAssemblies
Tipo: string
Default: String vazia
Variável Ambiente: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
Uma cadeia de caracteres delimitada por ponto-e-vírgula de conjuntos de assemblies de inicialização a serem excluídos na inicialização.
Principais: hostingStartupExcludeAssemblies
Tipo: string
Default: String vazia
Variável de Ambiente: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS_Port
A porta de redirecionamento HTTPS. Usado na aplicação de HTTPS.
Tecla: https_port
Tipo: string
Padrão: Um valor padrão não está definido.
Variável Ambiente: {PREFIX_}HTTPS_PORT
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting("https_port", "8080");
PreferHostingUrls
Indica se o host deve escutar as URLs configuradas com o IWebHostBuilder
em vez dessas URLs configuradas com a implementação IServer
.
Principais: preferHostingUrls
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável Ambiente: {PREFIX_}PREFERHOSTINGURLS
Para definir esse valor, use a variável de ambiente ou chame PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Evita o carregamento automático de assemblies de inicialização de hospedagem, incluindo aqueles configurados pelo assembly do aplicativo. Para obter mais informações, consulte Usar assemblies de inicialização de hospedagem no ASP.NET Core.
Tecla: preventHostingStartup
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável Ambiente: {PREFIX_}PREVENTHOSTINGSTARTUP
Para definir esse valor, use a variável de ambiente ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
A montagem para procurar a classe Startup
.
Principais: startupAssembly
Tipo: string
Predefinição: a compilação do aplicativo
Variável Ambiente: {PREFIX_}STARTUPASSEMBLY
Para definir esse valor, use a variável de ambiente ou chame UseStartup
.
UseStartup
pode ter um nome de montagem (string
) ou um tipo (TStartup
). Se vários métodos UseStartup
forem chamados, o último terá precedência.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
SuprimirMensagensDeStatus
Quando ativado, suprime mensagens de status de inicialização de hospedagem.
Principais: suppressStatusMessages
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável Ambiente: {PREFIX_}SUPPRESSSTATUSMESSAGES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URLs
Uma lista delimitada por ponto-e-vírgula de endereços IP ou endereços de host com portas e protocolos que o servidor deve escutar para solicitações. Por exemplo, http://localhost:123
. Use "*" para indicar que o servidor deve escutar solicitações em qualquer endereço IP ou nome de host usando a porta e o protocolo especificados (por exemplo, http://*:5000
). O protocolo (http://
ou https://
) deve ser incluído em cada URL. Os formatos suportados variam entre servidores.
Principais: urls
Tipo: string
padrão: http://localhost:5000
e https://localhost:5001
Variável de Ambiente: {PREFIX_}URLS
Para definir esse valor, use a variável de ambiente ou chame UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel tem a sua própria API de configuração de ponto final. Para obter mais informações, consulte Configurar endpoints para o servidor web ASP.NET Core Kestrel.
Raiz da Web
A propriedade IWebHostEnvironment.WebRootPath determina o caminho relativo para os ativos estáticos do aplicativo. Se o caminho não existir, um provedor de arquivos no-op será usado.
Principais: webroot
Tipo: string
Default: O padrão é wwwroot
. O caminho para {content root}/wwwroot deve existir.
Variável Ambiente: {PREFIX_}WEBROOT
Para definir esse valor, use a variável de ambiente ou chame UseWebRoot
em IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Para mais informações, consulte:
- Fundamentos: Raiz da Web
- ContentRoot
Gerenciar o tempo de vida do host
Chame métodos na implementação IHost já construída para iniciar e desligar a aplicação. Esses métodos afetam todas as implementações de IHostedService registradas no contêiner de serviço.
A diferença entre os métodos Run*
e Start*
é que Run*
aguarda a conclusão do host antes de retornar, enquanto os métodos Start*
retornam imediatamente. Os métodos Run*
são normalmente usados em aplicativos de console, enquanto os métodos Start*
são normalmente usados em serviços de longa execução.
Correr
Run executa o aplicativo e bloqueia o thread de chamada até que o host seja desligado.
RunAsync
RunAsync executa a aplicação e retorna um Task que se conclui quando o token de cancelamento ou encerramento é acionado.
RunConsoleAsync
RunConsoleAsync habilita o suporte ao console, cria e inicia o host e aguarda Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM para desligar.
Início
Start inicia o host de forma síncrona.
StartAsync
StartAsync inicia o host e retorna um Task que é concluído quando o token de cancelamento ou desligamento é acionado.
WaitForStartAsync é chamado no início de StartAsync
, que espera até que esteja completo antes de continuar. Este método pode ser usado para atrasar a inicialização até ser sinalizado por um evento externo.
StopAsync
StopAsync tenta parar o host dentro do tempo limite fornecido.
AguardarEncerramento
WaitForShutdown bloqueia o thread de chamada até que o desligamento seja acionado pelo IHostLifetime, como por meio de Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM.
WaitForShutdownAsync
WaitForShutdownAsync retorna um Task que é concluído quando o desligamento é acionado através do token fornecido e chama StopAsync.
Controlo externo
O controle direto do tempo de vida do host pode ser alcançado usando métodos que podem ser chamados externamente:
public class Program
{
private IHost _host;
public Program()
{
_host = new HostBuilder()
.Build();
}
public async Task StartAsync()
{
_host.StartAsync();
}
public async Task StopAsync()
{
using (_host)
{
await _host.StopAsync(TimeSpan.FromSeconds(5));
}
}
}
Os modelos ASP.NET Core criam um Host Genérico do .NET Core (HostBuilder).
Este artigo fornece informações sobre como usar o .NET Generic Host no ASP.NET Core. Para obter informações sobre como usar o .NET Generic Host em aplicativos de console, consulte .NET Generic Host.
Definição do anfitrião
Um host é um objeto que encapsula os recursos de uma aplicação, como:
- Injeção de dependência (DI)
- Registo
- Configuração
-
IHostedService
implementações
Quando um host é iniciado, ele chama IHostedService.StartAsync em cada implementação de IHostedService registrada na coleção de serviços hospedados do contêiner de serviço. Em um aplicativo Web, uma das implementações IHostedService
é um serviço Web que inicia uma implementação de servidor HTTP .
A principal razão para incluir todos os recursos interdependentes do aplicativo em um objeto é o gerenciamento do tempo de vida: controle sobre a inicialização do aplicativo e desligamento normal.
Configurar um anfitrião
O host é normalmente configurado, criado e executado por código na classe Program
. O método Main
:
- Chama um método
CreateHostBuilder
para criar e configurar um objeto construtor. - Chama os métodos
Build
eRun
no objeto builder.
Os modelos da Web ASP.NET Core geram o seguinte código para criar um host genérico:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
O código a seguir cria um host genérico usando carga de trabalho não-HTTP. A implementação IHostedService
é adicionada ao contêiner DI:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
Para uma carga de trabalho HTTP, o método Main
é o mesmo, mas CreateHostBuilder
chama ConfigureWebHostDefaults
:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
O código anterior é gerado pelos modelos ASP.NET Core.
Se o aplicativo usa o Entity Framework Core, não altere o nome ou a assinatura do método CreateHostBuilder
. As ferramentas Entity Framework Core esperam encontrar um método CreateHostBuilder
que configure o host sem executar a aplicação. Para obter mais informações, consulte Criação de DbContext em tempo de design.
Configurações padrão do construtor
O método CreateDefaultBuilder:
- Define a raiz do conteúdo para o caminho retornado por GetCurrentDirectory.
- Carrega a configuração do host de:
- Variáveis de ambiente prefixadas com
DOTNET_
. - Argumentos de linha de comando.
- Variáveis de ambiente prefixadas com
- Carrega a configuração do aplicativo de:
-
appsettings.json
. -
appsettings.{Environment}.json
. -
Segredos de usuário quando o aplicativo é executado no ambiente
Development
. - Variáveis de ambiente.
- Argumentos de linha de comando.
-
- Adiciona os seguintes provedores de de log:
- Consola
- Depurar
- Fonte de eventos
- EventLog (somente quando executado no Windows)
- Permite a validação de escopo e a validação de dependência quando o ambiente é Desenvolvimento.
O método ConfigureWebHostDefaults
:
- Carrega a configuração do host a partir de variáveis de ambiente prefixadas com
ASPNETCORE_
. - Define Kestrel servidor como o servidor Web e o configura usando os provedores de configuração de hospedagem do aplicativo. Para obter as opções padrão do servidor Kestrel, consulte Kestrel servidor Web no ASP.NET Core.
- Adiciona middleware de Filtragem de Host.
- Adiciona o middleware de Cabeçalhos Retidos se
ASPNETCORE_FORWARDEDHEADERS_ENABLED
for igual atrue
. - Permite a integração com o IIS. Para obter as configurações padrão do IIS, consulte Host ASP.NET Core no Windows com o IIS.
As seções Configurações de para todos os tipos de aplicativos e Configurações de para aplicativos Web mais adiante neste artigo mostram como substituir as configurações padrão do construtor.
Serviços fornecidos pelo framework
Os seguintes serviços são registados automaticamente:
Para obter mais informações sobre serviços fornecidos pelo framework, consulte injeção de dependência em ASP.NET Core.
IHostApplicationLifetime
Injete o serviço IHostApplicationLifetime (anteriormente IApplicationLifetime
) em qualquer classe para lidar com tarefas pós-inicialização e de desligamento normal. Três propriedades na interface são tokens de cancelamento usados para registrar métodos de manipulador de eventos de início de aplicativo e parada de aplicativo. A interface também inclui um método StopApplication
.
O exemplo a seguir é uma implementação IHostedService
que registra IHostApplicationLifetime
eventos:
internal class LifetimeEventsHostedService : IHostedService
{
private readonly ILogger _logger;
private readonly IHostApplicationLifetime _appLifetime;
public LifetimeEventsHostedService(
ILogger<LifetimeEventsHostedService> logger,
IHostApplicationLifetime appLifetime)
{
_logger = logger;
_appLifetime = appLifetime;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_appLifetime.ApplicationStarted.Register(OnStarted);
_appLifetime.ApplicationStopping.Register(OnStopping);
_appLifetime.ApplicationStopped.Register(OnStopped);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
private void OnStarted()
{
_logger.LogInformation("OnStarted has been called.");
// Perform post-startup activities here
}
private void OnStopping()
{
_logger.LogInformation("OnStopping has been called.");
// Perform on-stopping activities here
}
private void OnStopped()
{
_logger.LogInformation("OnStopped has been called.");
// Perform post-stopped activities here
}
}
IHostLifetime
A implementação IHostLifetime controla quando o host é iniciado e quando ele para. É utilizada a última implementação registada.
Microsoft.Extensions.Hosting.Internal.ConsoleLifetime
é a implementação padrão de IHostLifetime
.
ConsoleLifetime
:
- Ouve Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM e chama StopApplication para iniciar o processo de desligamento.
- Desbloqueia extensões como RunAsync e WaitForShutdownAsync.
IHostEnvironment
Injete o serviço IHostEnvironment em uma classe para obter informações sobre as seguintes configurações:
- NomeDaAplicação
- EnvironmentName
- ContentRootPath
Os aplicativos Web implementam a interface IWebHostEnvironment
, que herda IHostEnvironment
e adiciona o WebRootPath.
Configuração do host
A configuração do host é utilizada para as propriedades da implementação do IHostEnvironment.
A configuração do host está disponível em HostBuilderContext.Configuration dentro de ConfigureAppConfiguration. Após ConfigureAppConfiguration
, HostBuilderContext.Configuration
é substituído pela configuração do aplicativo.
Para adicionar a configuração do host, chame ConfigureHostConfiguration no IHostBuilder
.
ConfigureHostConfiguration
pode ser chamado várias vezes com resultados aditivos. O host usa qualquer opção que defina um valor por último em uma determinada chave.
O provedor de variáveis de ambiente com o prefixo DOTNET_
e os argumentos de linha de comando são incluídos por CreateDefaultBuilder
. Para aplicativos Web, o provedor de variável de ambiente com prefixo ASPNETCORE_
é adicionado. O prefixo é removido quando as variáveis de ambiente são lidas. Por exemplo, o valor da variável de ambiente para ASPNETCORE_ENVIRONMENT
torna-se o valor de configuração do host para a chave environment
.
O exemplo a seguir cria a configuração do host:
// using Microsoft.Extensions.Configuration;
Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configHost =>
{
configHost.SetBasePath(Directory.GetCurrentDirectory());
configHost.AddJsonFile("hostsettings.json", optional: true);
configHost.AddEnvironmentVariables(prefix: "PREFIX_");
configHost.AddCommandLine(args);
});
Configuração do aplicativo
A configuração do aplicativo é criada chamando ConfigureAppConfiguration no IHostBuilder
.
ConfigureAppConfiguration
pode ser chamado várias vezes com resultados aditivos. O aplicativo usa qualquer opção que defina um valor por último em uma determinada chave.
A configuração criada pela ConfigureAppConfiguration
está disponível em HostBuilderContext.Configuration para operações subsequentes e como um serviço da DI. A configuração do host também é adicionada à configuração do aplicativo.
Para obter mais informações, consulte Configuração no ASP.NET Core.
Configurações para todos os tipos de aplicativos
Esta seção lista as configurações de host que se aplicam a cargas de trabalho HTTP e não HTTP. Por padrão, as variáveis de ambiente usadas para definir essas configurações podem ter um prefixo DOTNET_
ou ASPNETCORE_
, que aparecem na configuração a seguir para o espaço reservado {PREFIX_}
.
Nome do aplicativo
A propriedade IHostEnvironment.ApplicationName é definida a partir da configuração do host durante a construção do host.
Principais: applicationName
Tipo: string
padrão: o nome da assemblagem que contém o ponto de entrada da aplicação.
Variável de Ambiente: {PREFIX_}APPLICATIONNAME
Para definir esse valor, use a variável de ambiente.
ContentRoot
A propriedade IHostEnvironment.ContentRootPath determina onde o host começa a procurar arquivos de conteúdo. Se o caminho não existir, o host falha em iniciar.
Principais: contentRoot
Tipo: string
padrão: a pasta onde reside o conjunto do aplicativo.
Variável de Ambiente: {PREFIX_}CONTENTROOT
Para definir esse valor, use a variável de ambiente ou chame UseContentRoot
em IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseContentRoot("c:\\content-root")
//...
Para mais informações, consulte:
Nome_do_ambiente
A propriedade IHostEnvironment.EnvironmentName pode ser definida como qualquer valor. Os valores definidos pela estrutura incluem Development
, Staging
e Production
. Os valores não diferenciam maiúsculas de minúsculas.
Principais: environment
Tipo: string
Default: Production
Variável Ambiente: {PREFIX_}ENVIRONMENT
Para definir esse valor, use a variável de ambiente ou chame UseEnvironment
em IHostBuilder
:
Host.CreateDefaultBuilder(args)
.UseEnvironment("Development")
//...
ShutdownTimeout
HostOptions.ShutdownTimeout define o tempo limite para StopAsync. O valor padrão é cinco segundos. Durante o período de tempo limite, o anfitrião:
- Os gatilhos IHostApplicationLifetime.ApplicationStopping.
- Tentativas de parar serviços hospedados, registrando erros para serviços que não conseguem parar.
Se o período de tempo limite expirar antes de todos os serviços hospedados pararem, todos os serviços ativos restantes serão interrompidos quando o aplicativo for desligado. Os serviços param mesmo que não tenham terminado o processamento. Se os serviços exigirem mais tempo para parar, aumente o tempo limite.
Tecla: shutdownTimeoutSeconds
Tipo: int
padrão: 5 segundos
Variável de Ambiente: {PREFIX_}SHUTDOWNTIMEOUTSECONDS
Para definir esse valor, use a variável de ambiente ou configure HostOptions
. O exemplo a seguir define o tempo limite para 20 segundos:
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.Configure<HostOptions>(option =>
{
option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
});
});
Configurações para aplicativos Web
Algumas configurações de host se aplicam apenas a cargas de trabalho HTTP. Por padrão, as variáveis de ambiente usadas para definir essas configurações podem ter um prefixo DOTNET_
ou ASPNETCORE_
.
Métodos de extensão em IWebHostBuilder
estão disponíveis para essas configurações. Exemplos de código que mostram como chamar os métodos de extensão assumem webBuilder
é uma instância de IWebHostBuilder
, como no exemplo a seguir:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.CaptureStartupErrors(true);
webBuilder.UseStartup<Startup>();
});
CapturarErrosDeInicialização
Quando ocorre false
, erros durante a inicialização resultam no encerramento do host. Quando true
, o host captura exceções durante a inicialização e tenta iniciar o servidor.
Tecla: captureStartupErrors
Tipo: bool
(true
/1
ou false
/0
)
padrão: o padrão é false
a menos que o aplicativo seja executado com Kestrel sob o IIS, onde o padrão é true
.
Variável de ambiente: {PREFIX_}CAPTURESTARTUPERRORS
Para definir esse valor, use a configuração ou chame CaptureStartupErrors
:
webBuilder.CaptureStartupErrors(true);
Erros Detalhados
Quando ativado, ou quando o ambiente é Development
, o aplicativo captura erros detalhados.
Principais: detailedErrors
Tipo: bool
(true
/1
ou false
/0
)
Padrão: false
Variável de Ambiente: {PREFIX_}DETAILEDERRORS
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
HostingStartupAssemblies
Uma cadeia de caracteres delimitada por ponto-e-vírgula de conjuntos de arranque para carregar na inicialização. Embora o valor de configuração seja padronizado para uma cadeia de caracteres vazia, os assemblies de inicialização de hospedagem sempre incluem o assembly do aplicativo. Quando os assemblies de inicialização de hospedagem são disponibilizados, são adicionados ao assembly da aplicação para serem carregados quando a aplicação constrói os seus serviços comuns durante a inicialização.
Key: hostingStartupAssemblies
Tipo: string
Default: String vazia
Variável Ambiente: {PREFIX_}HOSTINGSTARTUPASSEMBLIES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");
HostingStartupExcludeAssemblies
Uma cadeia de caracteres delimitada por ponto-e-vírgula com nomes de assemblies de inicialização a excluir na inicialização.
Principais: hostingStartupExcludeAssemblies
Tipo: string
Default: String vazia
Variável Ambiente: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");
HTTPS_Port
A porta de redirecionamento HTTPS. Usado na aplicação de HTTPS.
Principais: https_port
Tipo: string
padrão: um valor padrão não foi definido.
Variável Ambiente: {PREFIX_}HTTPS_PORT
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting("https_port", "8080");
PreferênciaUrlsDeHospedagem
Indica se o host deve escutar as URLs configuradas com o IWebHostBuilder
em vez dessas URLs configuradas com a implementação IServer
.
Principais: preferHostingUrls
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável Ambiente: {PREFIX_}PREFERHOSTINGURLS
Para definir esse valor, use a variável de ambiente ou chame PreferHostingUrls
:
webBuilder.PreferHostingUrls(true);
PreventHostingStartup
Impede o carregamento automático dos assemblies de inicialização de hospedagem, incluindo aqueles configurados pelo assembly da aplicação. Para obter mais informações, consulte Utilizar assemblies de arranque de hospedagem no ASP.NET Core.
Principais: preventHostingStartup
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável de Ambiente: {PREFIX_}PREVENTHOSTINGSTARTUP
Para definir esse valor, use a variável de ambiente ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");
StartupAssembly
A montagem destinada a procurar a classe Startup
.
Tecla: startupAssembly
Tipo: string
padrão: a assemblagem da aplicação
Variável de Ambiente: {PREFIX_}STARTUPASSEMBLY
Para definir esse valor, use a variável de ambiente ou chame UseStartup
.
UseStartup
pode ter um nome de assembly (string
) ou um tipo (TStartup
). Se vários métodos UseStartup
forem chamados, o último terá precedência.
webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();
SuprimirMensagensDeEstado
Quando ativado, suprime mensagens de status de inicialização de hospedagem.
Principais: suppressStatusMessages
Tipo: bool
(true
/1
ou false
/0
)
padrão : false
Variável Ambiente: {PREFIX_}SUPPRESSSTATUSMESSAGES
Para definir esse valor, use a configuração ou chame UseSetting
:
webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");
URLs
Uma lista delimitada por ponto-e-vírgula de endereços IP ou endereços de host com portas e protocolos que o servidor deve escutar para solicitações. Por exemplo, http://localhost:123
. Use "*" para indicar que o servidor deve escutar solicitações em qualquer endereço IP ou nome de host usando a porta e o protocolo especificados (por exemplo, http://*:5000
). O protocolo (http://
ou https://
) deve ser incluído em cada URL. Os formatos suportados variam entre servidores.
Principais: urls
Tipo: string
padrão: http://localhost:5000
e https://localhost:5001
Variável de Ambiente: {PREFIX_}URLS
Para definir esse valor, use a variável de ambiente ou chame UseUrls
:
webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");
Kestrel tem uma API própria de configuração de endpoint. Para obter mais informações, consulte Kestrel servidor Web no ASP.NET Core.
Raiz da Web
A propriedade IWebHostEnvironment.WebRootPath determina o caminho relativo para os ativos estáticos do aplicativo. Se o caminho não existir, um provedor de arquivos no-op será usado.
Principais: webroot
Tipo: string
Default: O padrão é wwwroot
. O caminho para {content root}/wwwroot deve existir.
Variável Ambiente: {PREFIX_}WEBROOT
Para definir esse valor, use a variável de ambiente ou chame UseWebRoot
em IWebHostBuilder
:
webBuilder.UseWebRoot("public");
Para mais informações, consulte:
- Fundamentos: Web root
- Raiz do Conteúdo
Gerenciar o tempo de vida do host
Chame métodos na implementação IHost construída para iniciar e parar a aplicação. Esses métodos afetam todas as implementações de IHostedService registradas no contêiner de serviço.
A diferença entre os métodos Run*
e Start*
é que os métodos Run*
aguardam a conclusão do host antes de retornar, enquanto os métodos Start*
retornam imediatamente. Os métodos Run*
são normalmente usados em aplicativos de console, enquanto os métodos Start*
são normalmente usados em serviços de longa execução.
Correr
Run executa o aplicativo e bloqueia o thread de chamada até que o host seja desligado.
RunAsync
RunAsync executa a aplicação e retorna um Task que é concluído quando o token de cancelamento ou de encerramento é acionado.
RunConsoleAsync
RunConsoleAsync habilita o suporte ao console, cria e inicia o host e aguarda Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM para desligar.
Início
Start inicia o host de forma síncrona.
StartAsync
StartAsync inicia o host e retorna um Task que é concluído quando o token de cancelamento ou encerramento é acionado.
WaitForStartAsync é chamado no início de StartAsync
, que espera até que esteja completo antes de continuar. Este método pode ser usado para atrasar a inicialização até ser sinalizado por um evento externo.
StopAsync
StopAsync tenta parar o host dentro do tempo limite fornecido.
EsperarPorEncerramento
WaitForShutdown bloqueia o thread de chamada até que o desligamento seja acionado pelo IHostLifetime, como por meio de Ctrl+C/SIGINT (Windows), Ctrl+C (macOS) ou SIGTERM.
WaitForShutdownAsync
WaitForShutdownAsync retorna um Task que é concluído quando o desligamento é acionado por meio do token fornecido e chama StopAsync.
Controlo externo
O controle direto do tempo de vida do host pode ser alcançado usando métodos que podem ser chamados externamente:
public class Program
{
private IHost _host;
public Program()
{
_host = new HostBuilder()
.Build();
}
public async Task StartAsync()
{
_host.StartAsync();
}
public async Task StopAsync()
{
using (_host)
{
await _host.StopAsync(TimeSpan.FromSeconds(5));
}
}
}
Recursos adicionais
- Tarefas em segundo plano com serviços hospedados no ASP.NET Core
- Link do GitHub para o código fonte do Host Genérico
Observação
Os links de documentação para a fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma tag para uma versão específica, utilize o menu suspenso para alternar entre ramificações ou tags. Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte do ASP.NET Core (dotnet/AspNetCore.Docs #26205).