Kurz: Použití dynamické konfigurace v ASP.NET Core aplikaci

ASP.NET Core systém konfigurace, který dokáže číst konfigurační data z různých zdrojů. Dokáže dynamicky zpracovávat změny, aniž by to způsobilo restartování aplikace. ASP.NET Core podporuje vazbu nastavení konfigurace na třídy .NET se silnými typy. Vloží je do kódu pomocí , který automaticky znovu načte konfiguraci aplikace při IOptionsSnapshot<T> změně podkladových dat.

Tento kurz ukazuje, jak můžete do kódu implementovat dynamické aktualizace konfigurace. Vychází z webové aplikace představené v rychlých startech. Než budete pokračovat, dokončete nejprve vytvoření ASP.NET Core aplikace App Configuration.

Kroky v tomto kurzu můžete provést v libovolném editoru kódu. Visual Studio Code je skvělá možnost, která je k dispozici na platformách Windows, macOS a Linux.

V tomto kurzu se naučíte:

  • Nastavte aplikaci tak, aby v reakci na změny v App Configuration store.
  • Vloží nejnovější konfiguraci do kontrolerů vaší aplikace.

Požadavky

Pokud chcete tento kurz provést, nainstalujte .NET Core SDK.

Pokud ještě nemáte předplatné Azure,vytvořte si bezplatný účet před tím, než začnete.

Než budete pokračovat, dokončete nejprve vytvoření ASP.NET Core aplikace App Configuration.

Přidání klíče sentinelu

Klíč sentinelu je speciální klíč, který aktualizujete po dokončení změny všech ostatních klíčů. Vaše aplikace monitoruje klíč sentinelu. Při zjištění změny aplikace aktualizuje všechny hodnoty konfigurace. Tento přístup pomáhá zajistit konzistenci konfigurace v aplikaci a snižuje celkový počet požadavků provedených na App Configuration v porovnání s monitorováním všech klíčů pro změny.

  1. V Azure Portal vyberte Průzkumník konfigurace a > vytvořit > klíč-hodnota.
  2. Jako Klíč zadejte TestApp:Nastavení:Sentinel. Jako Hodnotu zadejte 1. Pole Popisek a Typ obsahu ponechte prázdné.
  3. Vyberte Použít.

Poznámka

Pokud klíč sentinelu nepotřebujete, musíte ručně zaregistrovat každý klíč, který chcete monitorovat.

Opětovné načtení dat z App Configuration

  1. Přidejte odkaz na Microsoft.Azure.AppConfiguration.AspNetCore NuGet spuštěním následujícího příkazu:

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    
  2. Otevřete soubor Program.cs a aktualizujte CreateWebHostBuilder metodu a přidejte config.AddAzureAppConfiguration() metodu .

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

    V ConfigureRefresh metodě zaregistrujete klíče v rámci App Configuration úložiště, které chcete monitorovat na změny. Parametr refreshAll metody indikuje, že pokud se zaregistrovaný klíč změní, všechny konfigurační hodnoty se Register mají aktualizovat. Metoda určuje minimální dobu, která musí uplynout před provedením nového požadavku na App Configuration kontrolu všech SetCacheExpiration změn konfigurace. V tomto příkladu přepíšete výchozí dobu vypršení platnosti 30 sekund a místo toho zadáte dobu 5 minut. Tím se snižuje potenciální počet požadavků na vaše App Configuration úložiště.

    Poznámka

    Pro účely testování můžete snížit dobu vypršení platnosti aktualizace mezipaměti.

    K aktivaci aktualizace konfigurace použijete App Configuration middleware. Postup uvidíte v pozdějším kroku.

  3. Do adresáře Controllers přidejte soubor Nastavení.cs, který definuje a implementuje novou Settings třídu. Nahraďte obor názvů názvem vašeho projektu.

    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. Otevřete Soubor Startup.cs a aktualizujte ConfigureServices metodu . Voláním Configure<Settings> metody vytvořte vazbu konfiguračních dat ke Settings třídě . Voláním AddAzureAppConfiguration metody App Configuration do kolekce služby vaší aplikace přidejte další součásti.

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<Settings>(Configuration.GetSection("TestApp:Settings"));
        services.AddControllersWithViews();
        services.AddAzureAppConfiguration();
    }
    
  5. Aktualizujte Configure metodu a přidejte volání UseAzureAppConfiguration . Umožňuje vaší aplikaci používat App Configuration middleware k automatickému zpracování aktualizací konfigurace.

    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?}");
            });
    }
    

    Poznámka

    Tento App Configuration monitoruje klíč sentinelu nebo jakékoli jiné klíče, které jste zaregistrovali k aktualizaci ve volání ConfigureRefresh v předchozím kroku. Middleware se aktivuje při každém příchozím požadavku do vaší aplikace. Middleware však bude odesílat požadavky na kontrolu hodnoty pouze v App Configuration, když uplynula nastavená doba vypršení platnosti mezipaměti. Při zjištění změny buď aktualizuje celou konfiguraci, pokud se použije klíč sentinelu, nebo aktualizuje pouze hodnoty zaregistrovaných klíčů.

    • Pokud požadavek na App Configuration pro detekci změn selže, vaše aplikace bude dál používat konfiguraci v mezipaměti. Další kontrola bude provedena po uplynutí nakonfigurovaného času vypršení platnosti mezipaměti znovu a nové příchozí požadavky na vaši aplikaci.
    • Aktualizace konfigurace probíhá asynchronně při zpracování příchozích požadavků vaší aplikace. Příchozí požadavek, který aktualizaci aktivoval, se tím nezablokuje ani nezpomalí. Požadavek, který aktualizaci aktivoval, nemusí získat aktualizované hodnoty konfigurace, ale další požadavky to budou dělat.
    • Pokud chcete zajistit aktivaci middlewaru, volejte v kanálu požadavku co nejdříve, aby ho ve vaší aplikaci nezkrátí další app.UseAzureAppConfiguration() middleware.

Použití nejnovějších konfiguračních dat

  1. Otevřete soubor HomeController.cs v adresáři Controllers a přidejte odkaz na Microsoft.Extensions.Options balíček.

    using Microsoft.Extensions.Options;
    
  2. Aktualizujte HomeController třídu na příjem prostřednictvím Settings injektáže závislostí a využijte její hodnoty.

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

    Tip

    Další informace o vzorech možností při čtení hodnot konfigurace najdete v tématu Vzory možností v ASP.NET Core.

  3. Otevřete soubor Index.cshtml v adresáři Views > Home a nahraďte jeho obsah následujícím skriptem:

    <!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>
    

Místní sestavení a spuštění aplikace

  1. Pokud chcete sestavit aplikaci pomocí .NET Core CLI, spusťte v příkazovém prostředí následující příkaz:

        dotnet build
    
  2. Po úspěšném dokončení sestavení spusťte následující příkaz, který spustí webovou aplikaci místně:

        dotnet run
    
  3. Otevřete okno prohlížeče a přejděte na adresu URL zobrazenou ve dotnet run výstupu.

    Místní spuštění aplikace pro rychlý start

  4. Přihlaste se k webu Azure Portal. Vyberte Všechny prostředky a vyberte instanci App Configuration, kterou jste vytvořili v rychlém startu.

  5. Vyberte Průzkumníka konfigurace a aktualizujte hodnoty následujících klíčů. Nezapomeňte nakonec aktualizovat klíč sentinelu.

    Klíč Hodnota
    TestApp:Nastavení:BackgroundColor green
    TestApp:Nastavení:FontColor lightGray
    TestApp:Nastavení:Message Data z Azure App Configuration – nyní s živými aktualizacemi!
    TestApp:Nastavení:Sentinel 2
  6. Aktualizujte stránku prohlížeče a zobrazte nová nastavení konfigurace. Možná budete muset provést aktualizaci více než jednou, aby se změny projevily, nebo změnit dobu vypršení platnosti mezipaměti na méně než 5 minut.

    Místní spuštění aktualizované aplikace pro rychlý start

Vyčištění prostředků

Pokud nechcete dál používat prostředky vytvořené v tomto článku, odstraňte skupinu prostředků, kterou jste tady vytvořili, abyste předešli poplatkům.

Důležité

Odstranění skupiny prostředků je nevratné. Skupina prostředků a všechny prostředky v ní se trvale odstraní. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste vytvořili prostředky pro tento článek v rámci skupiny prostředků, která obsahuje další prostředky, které chcete zachovat, odstraňte všechny prostředky jednotlivě z příslušného podokna, místo aby se odstranila skupina prostředků.

  1. Přihlaste se k Azure Portala vyberte skupiny prostředků.
  2. Do pole filtrovat podle názvu zadejte název vaší skupiny prostředků.
  3. V seznamu výsledků vyberte název skupiny prostředků, aby se zobrazil přehled.
  4. Vyberte Odstranit skupinu prostředků.
  5. Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Zadejte název vaší skupiny prostředků, který chcete potvrdit, a vyberte Odstranit.

Po chvíli se odstraní skupina prostředků a všechny její prostředky.

Další kroky

V tomto kurzu jste povolili webové aplikaci ASP.NET Core dynamicky aktualizovat nastavení konfigurace z App Configuration. Informace o tom, jak pomocí spravované identity Azure zjednodušit přístup k App Configuration, najdete v dalším kurzu.