Öğretici: ASP.NET Core uygulamasında dinamik yapılandırma kullanma

ASP.NET Core,çeşitli kaynaklardan yapılandırma verilerini okuyabilen takılabilir bir yapılandırma sistemine sahiptir. Bir uygulamanın yeniden başlatılmasına neden olmadan değişiklikleri dinamik olarak işebilir. ASP.NET Core, yapılandırma ayarlarının kesin türe sahip .NET sınıflarına bağlanmayı destekler. Temel alınan veriler değişirken uygulamanın yapılandırmasını otomatik olarak yeniden yük alan kullanarak IOptionsSnapshot<T> bunları kodunuza eklenir.

Bu öğreticide, kodunda dinamik yapılandırma güncelleştirmelerini nasıl uygulayabilirsiniz? Hızlı başlangıçlarda tanıtan web uygulaması üzerinde derlemeler hazırlar. Devam etmek için önce Uygulama Yapılandırması ile ASP.NET Core uygulaması oluşturma adımını bitirin.

Bu öğreticide yer alan adımları yapmak için herhangi bir kod düzenleyicisini kullanabilirsiniz. Visual Studio Code Windows, macOS ve Linux platformlarında kullanılabilen harika bir seçenektir.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Bir Uygulama Yapılandırma mağazasındaki değişikliklere yanıt olarak yapılandırmasını güncelleştirmek için uygulamanızı ayarlayın.
  • En son yapılandırmayı uygulama denetleyicilerinize ekleme.

Önkoşullar

Bu öğreticiyi yapmak için .NET Core SDK.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Devam etmek için önce Uygulama Yapılandırması ile ASP.NET Core uygulaması oluşturma adımını bitirin.

Sentinel anahtarı ekleme

Sentinel anahtarı, diğer tüm anahtarların değişimini tamamlandıktan sonra güncelleştiren özel bir anahtardır. Uygulamanız sentinel anahtarını izler. Bir değişiklik algılandığında, uygulamanız tüm yapılandırma değerlerini yeniler. Bu yaklaşım, uygulamanızda yapılandırmanın tutarlılığını sağlamaya ve uygulama yapılandırmasına yapılan isteklerin genel sayısını azalttığından ve tüm anahtarların değişiklikler için izlenmesini karşılaştırmanıza yardımcı olur.

  1. Azure portal, yapılandırma gezgini > oluştur > anahtar-değer' i seçin.
  2. Anahtar için TestApp: Settings: Sentinel yazın. Değer için 1 girin. Etiketi ve içerik türünü boş bırakın.
  3. Uygula’yı seçin.

Not

Sentinel anahtarı kullanmıyorsanız, izlemek istediğiniz her anahtarı el ile kaydetmeniz gerekir.

Uygulama yapılandırmasından verileri yeniden yükleme

  1. Microsoft.Azure.AppConfiguration.AspNetCoreAşağıdaki komutu çalıştırarak NuGet paketine bir başvuru ekleyin:

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    
  2. Program. cs' yi açın ve yöntemi CreateWebHostBuilder eklemek için yöntemi güncelleştirin config.AddAzureAppConfiguration() .

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
                webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var settings = config.Build();
                    config.AddAzureAppConfiguration(options =>
                    {
                        options.Connect(settings["ConnectionStrings:AppConfig"])
                               .ConfigureRefresh(refresh =>
                                    {
                                        refresh.Register("TestApp:Settings:Sentinel", refreshAll: true)
                                               .SetCacheExpiration(new TimeSpan(0, 5, 0));
                                    });
                    });
                })
            .UseStartup<Startup>());
    

    ConfigureRefreshYönteminde, uygulama yapılandırma deponuzdaki değişiklikleri izlemek istediğiniz anahtarları kaydedersiniz. refreshAllYöntemi parametresi, Register kayıtlı anahtar değişirse tüm yapılandırma değerlerinin yenilenmesi gerektiğini gösterir. SetCacheExpirationYöntemi, yapılandırma değişikliklerini denetlemek Için uygulama yapılandırmasına yeni bir istek yapılmadan önce geçmesi gereken en kısa süreyi belirtir. Bu örnekte, 30 saniyelik varsayılan süre sonu süresini 5 dakikalık bir süre belirterek geçersiz kılarsınız. Bu, uygulama yapılandırma deponuzda yapılan isteklerin olası sayısını azaltır.

    Not

    Sınama amacıyla, önbellek yenileme sona erme süresini düşürmek isteyebilirsiniz.

    Bir yapılandırma yenilemeyi gerçekten tetiklemek için uygulama yapılandırma ara yazılımını kullanacaksınız. Bu, sonraki bir adımda nasıl yapılacağını göreceksiniz.

  3. Controllers dizinine yeni bir sınıf tanımlayan ve uygulayan bir Settings.cs dosyası Settings ekleyin. ad alanını projenizin adıyla değiştirin.

    namespace TestAppConfig
    {
        public class Settings
        {
            public string BackgroundColor { get; set; }
            public long FontSize { get; set; }
            public string FontColor { get; set; }
            public string Message { get; set; }
        }
    }
    
  4. Startup.cs'yi açın ve yöntemini ConfigureServices güncelleştirin. Yapılandırma Configure<Settings> verilerini sınıfına bağlamak için Settings çağrısı. Uygulama AddAzureAppConfiguration Yapılandırması bileşenlerini uygulamanın hizmet koleksiyonuna eklemek için çağrısı.

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<Settings>(Configuration.GetSection("TestApp:Settings"));
        services.AddControllersWithViews();
        services.AddAzureAppConfiguration();
    }
    
  5. yöntemini Configure güncelleştirin ve çağrısı UseAzureAppConfiguration ekleyin. Bu, uygulamanın sizin için yapılandırma güncelleştirmelerini otomatik olarak işlemek üzere Uygulama Yapılandırması ara yazılımını kullanmalarını sağlar.

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
    
            // Add the following line:
            app.UseAzureAppConfiguration();
    
            app.UseHttpsRedirection();
    
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
    }
    

    Not

    Uygulama Yapılandırması ara yazılımı, önceki adımda yapılan çağrıda yenilemek üzere sentinel anahtarını veya ConfigureRefresh diğer anahtarları izler. Ara yazılım, uygulamanıza gelen her istek üzerine tetiklenir. Ancak ara yazılım, ayardaki önbellek süre sonu süresi sona ererken yalnızca Uygulama Yapılandırması'nın değerini denetlemeye istek gönderir. Bir değişiklik algılandığında, sentinel anahtarı kullanılırsa tüm yapılandırmayı güncelleştirecek veya yalnızca kayıtlı anahtarların değerlerini güncelleştirecek.

    • Değişiklik algılama için Uygulama Yapılandırmasına bir istek başarısız olursa, uygulamanız önbelleğe alınmış yapılandırmayı kullanmaya devam eder. Yapılandırılan önbellek sona erme zamanı yeniden geçirıldığında ve uygulamanıza yeni gelen istekler olduğunda başka bir denetim yapılır.
    • Yapılandırma yenilemesi, uygulamanıza gelen isteklerin işlemesi için zaman uyumsuz olarak gerçekleşir. Yenilemeyi tetikleyen gelen isteği engellemez veya yavaşlatmaz. Yenilemeyi tetikleyen istek güncelleştirilmiş yapılandırma değerlerini alamaz, ancak sonraki istekler yapılır.
    • Ara yazılımın tetiklendiğinden emin olmak için, app.UseAzureAppConfiguration() istek işlem hattınızda uygun olan kadar erken çağırın. böylece, başka bir ara yazılım uygulamanızda bu uygulamayı kısa sürede devre dışı olmayacaktır.

En son yapılandırma verilerini kullan

  1. Controllers dizinindeki HomeController. cs ' yi açın ve pakete bir başvuru ekleyin Microsoft.Extensions.Options .

    using Microsoft.Extensions.Options;
    
  2. HomeControllerBağımlılık ekleme yoluyla almak için sınıfı güncelleştirin Settings ve değerlerini kullanın.

    public class HomeController : Controller
    {
        private readonly Settings _settings;
        private readonly ILogger<HomeController> _logger;
    
        public HomeController(ILogger<HomeController> logger, IOptionsSnapshot<Settings> settings)
        {
            _logger = logger;
            _settings = settings.Value;
        }
    
        public IActionResult Index()
        {
            ViewData["BackgroundColor"] = _settings.BackgroundColor;
            ViewData["FontSize"] = _settings.FontSize;
            ViewData["FontColor"] = _settings.FontColor;
            ViewData["Message"] = _settings.Message;
    
            return View();
        }
    
        // ...
    }
    

    İpucu

    Yapılandırma değerlerini okurken seçenekler deseni hakkında daha fazla bilgi için, ASP.NET Core Içindeki seçenekler desenlerinebakın.

  3. Görünümler > giriş dizininde Index. cshtml dosyasını açın ve içeriğini aşağıdaki komut dosyasıyla değiştirin:

    <!DOCTYPE html>
    <html lang="en">
    <style>
        body {
            background-color: @ViewData["BackgroundColor"]
        }
        h1 {
            color: @ViewData["FontColor"];
            font-size: @ViewData["FontSize"]px;
        }
    </style>
    <head>
        <title>Index View</title>
    </head>
    <body>
        <h1>@ViewData["Message"]</h1>
    </body>
    </html>
    

Uygulamayı yerel olarak derleyin ve çalıştırın

  1. .NET Core CLI kullanarak uygulamayı derlemek için komut kabuğu 'nda aşağıdaki komutu çalıştırın:

        dotnet build
    
  2. Oluşturma başarıyla tamamlandıktan sonra, Web uygulamasını yerel olarak çalıştırmak için aşağıdaki komutu çalıştırın:

        dotnet run
    
  3. Bir tarayıcı penceresi açın ve çıktıda gösterilen URL 'ye gidin dotnet run .

    Hızlı başlangıç uygulamasını yerel olarak başlatma

  4. Azure portalında oturum açın. Tüm kaynaklar' ı seçin ve hızlı başlangıçta oluşturduğunuz uygulama yapılandırma deposu örneğini seçin.

  5. Yapılandırma Gezgini' ni seçin ve aşağıdaki anahtarların değerlerini güncelleştirin. En son Sentinel anahtarını güncelleştirmeyi unutmayın.

    Anahtar Değer
    TestApp: ayarlar: BackgroundColor green
    TestApp:Settings:FontColor lightGray
    TestApp:Settings:Message Azure Uygulama Yapılandırması verileri - şimdi canlı güncelleştirmelerle!
    TestApp:Settings:Sentinel 2
  6. Yeni yapılandırma ayarlarını görmek için tarayıcı sayfasını yenileyin. Değişikliklerin yansıt olması için birden fazla yenilemeniz veya önbellek süre sonu sürenizi 5 dakikadan kısa bir süreye değiştirmeniz gerekir.

    Güncelleştirilmiş hızlı başlangıç uygulamasını yerel olarak başlatma

Kaynakları temizleme

Bu makalede oluşturulan kaynakları kullanmaya devam etmek istemiyorsanız, ücretlendirmemek için burada oluşturduğunuz kaynak grubunu silin.

Önemli

Silinen kaynak grupları geri alınamaz. Kaynak grubu ve içindeki tüm kaynaklar kalıcı olarak silinir. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. Bu makaleye ait kaynakları tutmak istediğiniz diğer kaynakları içeren bir kaynak grubu içinde oluşturduysanız, kaynak grubunu silmek yerine her kaynağı ilgili bölmeden ayrı ayrı silin.

  1. Azure Portaloturum açın ve kaynak grupları' nı seçin.
  2. Ada göre filtrele kutusuna kaynak grubunuzun adını girin.
  3. Sonuç listesinde, bir genel bakışı görmek için kaynak grubu adını seçin.
  4. Kaynak grubunu sil'i seçin.
  5. Kaynak grubunun silinmesini onaylamanız istenir. Onaylamak için kaynak grubunuzun adını girin ve Sil' i seçin.

Birkaç dakika sonra kaynak grubu ve tüm kaynakları silinir.

Sonraki adımlar

Bu öğreticide, Uygulama Yapılandırması'ASP.NET dinamik olarak yenilemek için ASP.NET Core web uygulamanızı etkinleştirdiyseniz. Azure tarafından yönetilen kimliği kullanarak Uygulama Yapılandırmasına erişimi kolaylaştırma hakkında bilgi edinmek için sonraki öğreticiye devam edin.