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é.
Doporučená akce
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.