Kestrel:默认检测运行时的配置更改
Kestrel 现在会在运行时响应对项目的 IConfiguration
实例 Kestrel
部分(例如 appsettings.json)的更改。 若要详细了解如何使用 appsettings.json 配置 Kestrel,请参阅终结点配置中的 appsettings.json 示例。
Kestrel 将根据需要绑定、取消绑定和重新绑定终结点,以响应这些配置更改。
有关讨论,请参阅 dotnet/aspnetcore#22807。
引入的版本
5.0 预览版 7
旧行为
在 ASP.NET Core 5.0 预览版 6 之前,Kestrel 不支持在运行时更改配置。
在 ASP.NET Core 5.0 预览版 6 中,可以选择在运行时响应配置更改(这是现在的默认行为)。 要选择加入,需要手动绑定 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>();
});
}
新行为
默认情况下,Kestrel 会在运行时响应配置更改。 为支持该更改,ConfigureWebHostDefaults 默认使用 reloadOnChange: true
调用 KestrelServerOptions.Configure(IConfiguration, bool)
。
更改原因
此项更改是为了在运行时支持终结点重新配置,而无需完全重启服务器。 与完全重启服务器不同,未更改的终结点甚至不会暂时解除绑定。
建议操作
在大多数情况下,Kestrel 的默认配置部分在运行时不会更改,这种更改不会有任何影响,也不需要执行任何操作。
对于 Kestrel 的默认配置部分在运行时发生更改并且 Kestrel 应响应这种更改的情况,这是现在的默认行为。
对于 Kestrel 的默认配置部分在运行时更改并且 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: false); }); webBuilder.UseStartup<Startup>(); }); }
注意:
此更改不会修改 KestrelServerOptions.Configure(IConfiguration)
重载的行为,它仍默认为 reloadOnChange: false
行为。
另外,请务必确保配置源支持重载。 对于 JSON 源,将通过调用 AddJsonFile(path, reloadOnChange: true)
配置重载。 默认情况下,已为 appsettings.json 和 appsettings.{Environment}.json 配置重载。