Dela via


Kestrel: Konfigurationsändringar vid körning identifieras som standard

Kestrel reagerar nu på ändringar som gjorts i Kestrel avsnittet i projektets IConfiguration instans (till exempel appsettings.json) vid körning. Mer information om hur du konfigurerar Kestrel med appsettings.json finns i appsettings.json exempel i Slutpunktskonfiguration.

Kestrel binder, kopplar bort och kopplar om slutpunkter efter behov för att reagera på dessa konfigurationsändringar.

Mer information finns i problem med dotnet/aspnetcore#22807.

Version introducerad

5.0 Förhandsversion 7

Gammalt beteende

Innan ASP.NET Core 5.0 Preview 6 hade Kestrel inte stöd för att ändra konfigurationen vid körning.

I ASP.NET Core 5.0 Preview 6 kan du välja det nu standardmässiga beteendet att reagera på konfigurationsändringar vid körning. Välja nödvändig bindning Av Kestrels konfiguration manuellt:

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

Nytt beteende

Kestrel reagerar som standard på konfigurationsändringar vid körning. För att stödja den ändringen ConfigureWebHostDefaults anropas KestrelServerOptions.Configure(IConfiguration, bool) med reloadOnChange: true som standard.

Orsak till ändringen

Ändringen gjordes för att stödja omkonfiguration av slutpunkter vid körning utan att servern startades om helt. Till skillnad från vid en fullständig serveromstart är oförändrade slutpunkter inte ens tillfälligt obundna.

  • För de flesta scenarier där Kestrels standardkonfigurationsavsnitt inte ändras vid körning har den här ändringen ingen inverkan och ingen åtgärd krävs.

  • För scenarier där Kestrels standardkonfigurationsavsnitt ändras vid körning och Kestrel bör reagera på det, är detta nu standardbeteendet.

  • För scenarier där Kestrels standardkonfigurationsavsnitt ändras vid körning och Kestrel inte bör reagera på det, kan du välja bort följande:

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

Anteckningar:

Den här ändringen ändrar inte överbelastningens KestrelServerOptions.Configure(IConfiguration) beteende, vilket fortfarande är standard för beteendet reloadOnChange: false .

Det är också viktigt att se till att konfigurationskällan stöder inläsning igen. För JSON-källor konfigureras omläsningen genom att anropa AddJsonFile(path, reloadOnChange: true). Omläsning har redan konfigurerats som standard för appsettings.json och apparinställningar.{ Environment}.json.

Berörda API:er

GenericHostBuilderExtensions.ConfigureWebHostDefaults