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.
Rekommenderad åtgärd
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.