Compartilhar via


Kestrel: alterações de configuração em tempo de execução detectadas por padrão

O Kestrel agora reage às alterações feitas na seção Kestrel da instância IConfiguration do projeto (por exemplo, appsettings.json) em tempo de execução. Para saber mais sobre como configurar o Kestrel usando appsettings.json, confira o exemplo appsettings.json na configuração do Ponto de Extremidade.

O Kestrel associará, desassociará e reassociará os pontos de extremidade conforme necessário para reagir a essas alterações de configuração.

Para discussão, confira o problema dotnet/aspnetcore#22807.

Versão introduzida

5.0 Versão Prévia 7

Comportamento antigo

Antes do ASP.NET Core Versão Prévia 5.0 6, o Kestrel dava suporte a alterações de configuração em tempo de execução.

No ASP.NET Core 5.0 Versão Prévia 6, você pode optar pelo comportamento agora padrão de reagir às alterações de configuração em tempo de execução. Aceitando a configuração obrigatória do Kestrel manualmente:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

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.UseKestrel((builderContext, kestrelOptions) =>
                {
                    kestrelOptions.Configure(
                        builderContext.Configuration.GetSection("Kestrel"), reloadOnChange: true);
                });

                webBuilder.UseStartup<Startup>();
            });
}

Novo comportamento

O Kestrel reage às alterações de configuração em tempo de execução por padrão. Para dar suporte a essa alteração, ConfigureWebHostDefaults chama KestrelServerOptions.Configure(IConfiguration, bool) com reloadOnChange: true por padrão.

Motivo da alteração

A alteração foi feita para dar suporte à reconfiguração do ponto de extremidade em tempo de execução sem reiniciar completamente o servidor. Ao contrário de uma reinicialização completa do servidor, os pontos de extremidade inalterados não são desassociados, nem mesmo temporariamente.

  • Para a maioria dos cenários em que a seção de configuração padrão do Kestrel não é alterada em tempo de execução, essa alteração não tem qualquer impacto e nenhuma ação é necessária.

  • Para cenários em que a seção de configuração padrão do Kestrel é alterada em tempo de execução e o Kestrel precisa reagir a ela, agora esse é o comportamento padrão.

  • Para cenários em que a seção de configuração padrão do Kestrel é alterada em tempo de execução e o Kestrel não deve reagir a ela, você pode recusar da seguinte maneira:

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    
    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.UseKestrel((builderContext, kestrelOptions) =>
                    {
                        kestrelOptions.Configure(
                            builderContext.Configuration.GetSection("Kestrel"), reloadOnChange: false);
                    });
    
                    webBuilder.UseStartup<Startup>();
                });
    }
    

Observações:

Essa alteração não modifica o comportamento da sobrecarga KestrelServerOptions.Configure(IConfiguration), que ainda adota como padrão o comportamento reloadOnChange: false.

Também é importante garantir que a fonte de configuração dê suporte ao recarregamento. Para fontes JSON, o recarregamento é configurado chamando AddJsonFile(path, reloadOnChange: true). O recarregamento já está configurado por padrão para appsettings.json e appsettings.{Environment}.json.

APIs afetadas

GenericHostBuilderExtensions.ConfigureWebHostDefaults