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.
Zalecana akcja
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.