Bagikan melalui


Kestrel: Perubahan konfigurasi pada waktu proses terdeteksi secara default

Kestrel sekarang bereaksi terhadap perubahan yang dilakukan pada Kestrel bagian instans proyek IConfiguration (misalnya, appsettings.json) pada waktu proses. Untuk mempelajari selengkapnya tentang cara mengonfigurasi Kestrel menggunakan appsettings.json, lihat contoh appsettings.json di Konfigurasi titik akhir.

Kestrel akan mengikat, membatalkan ikatan, dan mengikat kembali titik akhir seperlunya untuk bereaksi terhadap perubahan konfigurasi ini.

Untuk diskusi, lihat masalah dotnet/aspnetcore#22807.

Versi yang diperkenalkan

5.0 Pratinjau 7

Perilaku yang lama

Sebelum ASP.NET Core 5.0 Pratinjau 6, Kestrel tidak mendukung perubahan konfigurasi pada waktu proses.

Di ASP.NET Core 5.0 Pratinjau 6, Anda dapat memilih perilaku default saat ini untuk bereaksi terhadap perubahan konfigurasi pada waktu proses. Memilih konfigurasi Kestrel pengikatan yang diperlukan secara manual:

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

Perilaku yang baru

Kestrel bereaksi terhadap perubahan konfigurasi pada waktu proses secara default. Untuk mendukung perubahan tersebut, ConfigureWebHostDefaults panggil KestrelServerOptions.Configure(IConfiguration, bool) dengan secara reloadOnChange: true default.

Alasan untuk berubah

Perubahan dilakukan untuk mendukung konfigurasi ulang titik akhir pada waktu proses tanpa memulai ulang server sepenuhnya. Tidak seperti menghidupkan ulang server penuh, titik akhir yang tidak berubah tidak terikat bahkan sementara.

  • Untuk sebagian besar skenario di mana bagian konfigurasi default Kestrel tidak berubah pada waktu proses, perubahan ini tidak berdampak dan tidak ada tindakan yang diperlukan.

  • Untuk skenario di mana bagian konfigurasi default Kestrel berubah pada waktu proses dan Kestrel harus bereaksi terhadapnya, ini sekarang adalah perilaku default.

  • Untuk skenario di mana bagian konfigurasi default Kestrel berubah pada run time dan Kestrel tidak boleh bereaksi terhadapnya, Anda dapat memilih keluar sebagai berikut:

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

Catatan:

Perubahan ini tidak mengubah perilaku KestrelServerOptions.Configure(IConfiguration) kelebihan beban, yang masih default ke reloadOnChange: false perilaku.

Penting juga untuk memastikan sumber konfigurasi mendukung pengisian ulang. Untuk sumber JSON, memuat ulang dikonfigurasi dengan memanggil AddJsonFile(path, reloadOnChange: true). Muat ulang sudah dikonfigurasi secara default untuk appsettings.json dan appsettings.{ Lingkungan}.json.

API yang Terpengaruh

GenericHostBuilderExtensions.ConfigureWebHostDefaults