Kestrel: Varsayılan olarak algılanan çalışma zamanında yapılandırma değişiklikleri

Kestrel artık çalışma zamanında proje örneğinin Kestrel bölümünde yapılan değişikliklere (örneğin, appsettings.json) tepki IConfiguration gösteriyor. appsettings.json kullanarak Kestrel'i yapılandırma hakkında daha fazla bilgi edinmek için Uç nokta yapılandırması'ndaki appsettings.json örneğine bakın.

Kestrel, bu yapılandırma değişikliklerine tepki vermek için uç noktaları gerektiği şekilde bağlar, bağlar ve yeniden bağlar.

Tartışma için bkz. sorun dotnet/aspnetcore#22807.

Sürüm kullanıma sunulmuştur

5.0 Önizleme 7

Eski davranış

ASP.NET Core 5.0 Preview 6'ya başlamadan önce Kestrel çalışma zamanında yapılandırmayı değiştirmeyi desteklemiyordu.

ASP.NET Core 5.0 Preview 6'da, çalışma zamanında yapılandırma değişikliklerine tepki vermenin artık varsayılan davranışını seçebilirsiniz. Gerekli bağlama Kestrel'in yapılandırmasını el ile kabul etme:

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

Yeni davranış

Kestrel varsayılan olarak çalışma zamanında yapılandırma değişikliklerine tepki gösterir. Bu değişikliği desteklemek için ile ConfigureWebHostDefaults varsayılan olarak öğesini çağırır KestrelServerOptions.Configure(IConfiguration, bool)reloadOnChange: true .

Değişiklik nedeni

Sunucu tamamen yeniden başlatılmadan çalışma zamanında uç nokta yeniden yapılandırmayı desteklemek için değişiklik yapıldı. Tam sunucu yeniden başlatmanın aksine, değişmeyen uç noktalar geçici olarak bile ilişkisiz değildir.

  • Kestrel'in varsayılan yapılandırma bölümünün çalışma zamanında değişmediği çoğu senaryoda bu değişikliğin hiçbir etkisi yoktur ve hiçbir eylem gerekmez.

  • Kestrel'in varsayılan yapılandırma bölümünün çalışma zamanında değiştiği ve Kestrel'in buna tepki vermesi gereken senaryolar için, bu artık varsayılan davranıştır.

  • Kestrel'in varsayılan yapılandırma bölümünün çalışma zamanında değiştiği ve Kestrel'in buna tepki vermemesi gereken senaryolar için, aşağıdaki gibi devre dışı bırakabilirsiniz:

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

Notlar:

Bu değişiklik, aşırı yüklemenin KestrelServerOptions.Configure(IConfiguration) davranışını değiştirmez ve yine de davranışı varsayılan olarak kullanır reloadOnChange: false .

Yapılandırma kaynağının yeniden yüklemeyi desteklediğinden emin olmak da önemlidir. JSON kaynakları için yeniden yükleme çağrılarak AddJsonFile(path, reloadOnChange: true)yapılandırılır. Yeniden yükleme, appsettings.json ve uygulama ayarları için varsayılan olarak zaten yapılandırılmıştır.{ Environment}.json.

Etkilenen API’ler

GenericHostBuilderExtensions.ConfigureWebHostDefaults