Kestrel: Zmiany konfiguracji w czasie wykonywania wykryte domyślnie

Usługa Kestrel reaguje teraz na zmiany wprowadzone w Kestrel sekcji wystąpienia projektu IConfiguration (na przykład appsettings.json) w czasie wykonywania. Aby dowiedzieć się więcej o sposobie konfigurowania platformy Kestrel przy użyciu appsettings.json, zobacz appsettings.json przykład w temacie Konfiguracja punktu końcowego.

Narzędzie Kestrel będzie wiązać, cofnąć powiązanie i ponownie powiązać punkty końcowe w razie potrzeby, aby reagować na te zmiany konfiguracji.

Aby zapoznać się z dyskusją, zobacz problem dotnet/aspnetcore#22807.

Wprowadzona wersja

5.0 (wersja zapoznawcza 7)

Stare zachowanie

Przed ASP.NET Core 5.0 (wersja zapoznawcza 6) Kestrel nie obsługiwał zmiany konfiguracji w czasie wykonywania.

W wersji ASP.NET Core 5.0 (wersja zapoznawcza 6) możesz wybrać domyślne zachowanie reagowania na zmiany konfiguracji w czasie wykonywania. Ręczne wyrażenie zgody na konfigurację wymaganego powiązania 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>();
            });
}

Nowe zachowanie

Kestrel domyślnie reaguje na zmiany konfiguracji w czasie wykonywania. Aby umożliwić obsługę tej zmiany, ConfigureWebHostDefaults domyślnie wywołuje wywołania KestrelServerOptions.Configure(IConfiguration, bool) za pomocą reloadOnChange: true polecenia .

Przyczyna wprowadzenia zmiany

Wprowadzono zmianę w celu obsługi ponownej konfiguracji punktu końcowego w czasie wykonywania bez całkowitego ponownego uruchomienia serwera. W przeciwieństwie do pełnego ponownego uruchamiania serwera, niezmienione punkty końcowe nie są nawet tymczasowe.

  • W przypadku większości scenariuszy, w których domyślna sekcja konfiguracji Kestrel nie zmienia się w czasie wykonywania, ta zmiana nie ma wpływu i nie jest wymagana żadna akcja.

  • W przypadku scenariuszy, w których domyślna sekcja konfiguracji Kestrel zmienia się w czasie wykonywania i Kestrel powinna reagować na nie, jest to teraz zachowanie domyślne.

  • W przypadku scenariuszy, w których domyślna sekcja konfiguracji Kestrel zmienia się w czasie wykonywania i Kestrel nie powinna reagować na nie, możesz zrezygnować w następujący sposób:

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

Uwagi:

Ta zmiana nie modyfikuje zachowania KestrelServerOptions.Configure(IConfiguration) przeciążenia, które nadal jest domyślnie ustawione na reloadOnChange: false zachowanie.

Ważne jest również, aby upewnić się, że źródło konfiguracji obsługuje ponowne ładowanie. W przypadku źródeł JSON ponowne ładowanie jest konfigurowane przez wywołanie metody AddJsonFile(path, reloadOnChange: true). Ponowne ładowanie jest już domyślnie skonfigurowane dla appsettings.json i appsettings.{ Środowisko}.json.

Dotyczy interfejsów API

GenericHostBuilderExtensions.ConfigureWebHostDefaults