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.
Tindakan yang direkomendasikan
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk