Sdílet prostřednictvím


Kestrel: Změny konfigurace za běhu zjištěné ve výchozím nastavení

Kestrel teď reaguje na změny provedené v Kestrel části instance projektu IConfiguration (například appsettings.json) za běhu. Další informace o tom, jak nakonfigurovat Kestrel pomocí appsettings.json, najdete v appsettings.json příkladu v konfiguraci koncového bodu.

Kestrel vytvoří vazbu, zrušení vazby a opětovné vazby koncových bodů, aby bylo možné reagovat na tyto změny konfigurace.

Diskuzi najdete v tématu problém dotnet/aspnetcore#22807.

Zavedená verze

5.0 Preview 7

Staré chování

Před ASP.NET Core 5.0 Preview 6 nepodporuje Kestrel změnu konfigurace za běhu.

V ASP.NET Core 5.0 Preview 6 se můžete přihlásit k výchozímu chování reakce na změny konfigurace za běhu. Ruční vyjádření souhlasu s požadovanou konfigurací vazby Kestrel:

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>();
            });
}

Nové chování

Kestrel ve výchozím nastavení reaguje na změny konfigurace za běhu. Pro podporu této změny ConfigureWebHostDefaults ve výchozím nastavení volání KestrelServerOptions.Configure(IConfiguration, bool) reloadOnChange: true .

Důvod změny

Změna byla provedena tak, aby podporovala rekonfiguraci koncového bodu v době běhu bez úplné restartování serveru. Na rozdíl od úplného restartování serveru nejsou nezměněné koncové body ani dočasně nevázané.

  • U většiny scénářů, ve kterých se výchozí oddíl konfigurace Kestrel v době běhu nezmění, tato změna nemá žádný vliv a nevyžaduje se žádná akce.

  • Ve scénářích, ve kterých se výchozí konfigurační oddíl Kestrel mění za běhu a Kestrel by na ni měl reagovat, je to teď výchozí chování.

  • Ve scénářích, ve kterých se výchozí konfigurační oddíl Kestrel změní za běhu a Kestrel by na něj neměl reagovat, můžete se odhlásit takto:

    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>();
                });
    }
    

Poznámky:

Tato změna nemění chování KestrelServerOptions.Configure(IConfiguration) přetížení, které stále ve výchozím nastavení reloadOnChange: false chování.

Je také důležité se ujistit, že zdroj konfigurace podporuje opětovné načítání. Pro zdroje JSON je opětovné načtení nakonfigurováno voláním AddJsonFile(path, reloadOnChange: true). Opětovné načítání je už ve výchozím nastavení nakonfigurované pro appsettings.json a nastavení aplikací.{ Environment}.json.

Ovlivněná rozhraní API

GenericHostBuilderExtensions.ConfigureWebHostDefaults