Zelfstudie: Dynamische configuratie in een ASP.NET Core-app gebruiken

ASP.NET Core heeft een pluggable configuratiesysteem waarmee configuratiegegevens uit verschillende bronnen kunnen worden gelezen. Het kan dynamisch wijzigingen verwerken zonder dat de toepassing opnieuw moet worden gestart. ASP.NET Core ondersteunt de binding van configuratie-instellingen tot sterk getypeerde .NET-klassen. Deze worden in uw code injecteren met behulp van , waarmee de configuratie van de toepassing automatisch opnieuw wordt geladen wanneer IOptionsSnapshot<T> de onderliggende gegevens worden gewijzigd.

In deze zelfstudie leert hoe u dynamische configuratie-updates kunt implementeren in uw code. Dit is gebaseerd op de web-app die is geïntroduceerd in de quickstarts. Volg eerst Een ASP.NET Core-app maken met App Configuration voordat u verder gaat.

U kunt elke code-editor gebruiken om de stappen in deze zelfstudie uit te voeren. Visual Studio Code is een uitstekende optie die beschikbaar is op de Windows-, macOS- en Linux-platforms.

In deze zelfstudie leert u het volgende:

  • Uw toepassing instellen voor het bijwerken van de configuratie als reactie op wijzigingen in een App Configuration-archief.
  • De meest recente configuratie in de controllers van uw toepassing invoeren.

Vereisten

Als u deze zelfstudie wilt uitvoeren, installeert u de .NET Core SDK.

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Volg eerst Een ASP.NET Core-app maken met App Configuration voordat u verder gaat.

Een Sentinel-sleutel toevoegen

Een Sentinel-sleutel is een speciale sleutel die u bij werkt nadat u de wijziging van alle andere sleutels hebt voltooid. Uw toepassing bewaakt de Sentinel-sleutel. Wanneer er een wijziging wordt gedetecteerd, vernieuwt uw toepassing alle configuratiewaarden. Deze aanpak zorgt voor de consistentie van de configuratie in uw toepassing en vermindert het totale aantal aanvragen voor App Configuration, vergeleken met het controleren van alle sleutels op wijzigingen.

  1. Selecteer in de Azure Portal Configuratieverkenner> Maken > Sleutelwaarde.
  2. Voer bij Sleutel TestApp:Settings:Sentinel in. Voer 1 in bij Waarde. Laat Label en Inhoudstype leeg.
  3. Selecteer Toepassen.

Notitie

Als u geen Sentinel-sleutel gebruikt, moet u elke sleutel die u wilt bewaken handmatig registreren.

Gegevens opnieuw laden vanuit app-configuratie

  1. Voeg een verwijzing aan het NuGet-pakket Microsoft.Azure.AppConfiguration.AspNetCore toe door de volgende opdracht uit te voeren:

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    
  2. Open Program.cs en werk de methode CreateWebHostBuilder bij om de methode config.AddAzureAppConfiguration() toe te voegen.

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

    In de ConfigureRefresh methode registreert u sleutels in uw App Configuration die u wilt controleren op wijzigingen. De refreshAll parameter voor de methode geeft aan dat alle Register configuratiewaarden moeten worden vernieuwd als de geregistreerde sleutel wordt gewijzigd. De methode geeft de minimale tijd aan die moet verstreken voordat een nieuwe aanvraag wordt ingediend om App Configuration om te controleren op SetCacheExpiration eventuele configuratiewijzigingen. In dit voorbeeld overschrijven we de standaardverlooptijd van 30 seconden, met een tijd van 5 minuten. Dit vermindert het potentiële aantal aanvragen naar uw App Configuration winkel.

    Notitie

    Voor testdoeleinden wilt u mogelijk de verlooptijd voor het vernieuwen van de cache verlagen.

    Als u een configuratievernieuwing daadwerkelijk wilt activeren, gebruikt u de App Configuration middleware. In een latere stap ziet u hoe u dit doet.

  3. Voeg een Instellingen.cs toe in de map Controllers die een nieuwe klasse definieert en Settings implementeert. Vervang de naamruimte door de naam van uw project.

    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. Open Startup.cs en werk de methode ConfigureServices bij. Roep Configure<Settings> aan om configuratiegegevens te binden aan de Settings klasse . Roep AddAzureAppConfiguration aan om App Configuration toe te voegen aan de serviceverzameling van uw toepassing.

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<Settings>(Configuration.GetSection("TestApp:Settings"));
        services.AddControllersWithViews();
        services.AddAzureAppConfiguration();
    }
    
  5. Werk de Configure methode bij en voeg een aanroep toe aan UseAzureAppConfiguration . Hierdoor kan uw toepassing de App Configuration middleware gebruiken om de configuratie-updates automatisch voor u af te handelen.

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

    Notitie

    De App Configuration bewaakt de Sentinel-sleutel of andere sleutels die u hebt geregistreerd voor vernieuwen in de ConfigureRefresh aanroep in de vorige stap. De middleware wordt geactiveerd bij elke binnenkomende aanvraag naar uw toepassing. De middleware verzendt echter alleen aanvragen om de waarde in de App Configuration wanneer de door u in te stellen vervaltijd van de cache is verstreken. Wanneer er een wijziging wordt gedetecteerd, wordt alle configuratie bijgewerkt als de Sentinel-sleutel wordt gebruikt of worden alleen de waarden van de geregistreerde sleutels bijgewerkt.

    • Als een aanvraag om een App Configuration voor wijzigingsdetectie mislukt, blijft uw toepassing de configuratie in de cache gebruiken. Er wordt een andere controle gedaan wanneer de geconfigureerde verlooptijd van de cache opnieuw is verstreken en er nieuwe binnenkomende aanvragen naar uw toepassing zijn.
    • Het vernieuwen van de configuratie vindt asynchroon plaats bij de verwerking van binnenkomende aanvragen van uw toepassing. De binnenkomende aanvraag die de vernieuwing heeft geactiveerd, wordt niet geblokkeerd of vertraagd. De aanvraag die de vernieuwing heeft geactiveerd, krijgt mogelijk niet de bijgewerkte configuratiewaarden, maar de volgende aanvragen wel.
    • Om ervoor te zorgen dat de middleware wordt geactiveerd, roept u zo vroeg mogelijk aan in uw aanvraagpijplijn, zodat een andere middleware deze niet verkort app.UseAzureAppConfiguration() in uw toepassing.

De meest recente configuratiegegevens gebruiken

  1. Open HomeController.cs in de map Controllers en voeg een verwijzing naar het pakket Microsoft.Extensions.Options toe.

    using Microsoft.Extensions.Options;
    
  2. Werk de klasse HomeController bij voor het ontvangen van Settings via afhankelijkheidsinjectie en gebruik de waarden ervan.

    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

    Zie Optiepatronen in ASP.NET Core voor meer informatie over het optiepatroon bij het lezen van configuratiewaarden.

  3. Open Index.cshtml in de directory Views > Home en vervang de inhoud ervan door het volgende script:

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

De app lokaal compileren en uitvoeren

  1. Compileer de app met behulp van de .NET Core CLI door de volgende opdracht uit te voeren in de opdrachtshell:

        dotnet build
    
  2. Nadat het bouwen is voltooid, voert u de volgende opdracht uit om de web-app lokaal uit te voeren:

        dotnet run
    
  3. Open een browservenster en ga naar de URL die wordt weergegeven in de dotnet run-uitvoer.

    Quickstart-app lokaal starten

  4. Meld u aan bij de Azure-portal. Selecteer Alle resources en selecteer de instantie van het App Configuration-archief dat u in de quickstart hebt gemaakt.

  5. Selecteer Configuration Explorer en werk de waarden van de volgende sleutels bij. Vergeet niet om de Sentinel-sleutel ten laatste bij te werken.

    Sleutel Waarde
    TestApp:Settings:BackgroundColor groen
    TestApp:Settings:FontColor lightGray
    TestApp:Settings:Message Gegevens uit Azure-app-configuratie - nu met live updates!
    TestApp:Settings:Sentinel 2
  6. Vernieuw de browserpagina om de nieuwe configuratie-instellingen te zien. Mogelijk moet u meer dan één keer vernieuwen voordat de wijzigingen worden doorgevoerd, of de verlooptijd van de cache wijzigen in minder dan 5 minuten.

    Bijgewerkte quickstart-app lokaal starten

Resources opschonen

Als u niet door wilt gaan met de resources die in dit artikel zijn gemaakt, verwijdert u de resourcegroep die u hier hebt gemaakt om kosten te voorkomen.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. De resourcegroep en alle resources daarin worden permanent verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de resources voor dit artikel in een resourcegroep hebt gemaakt die andere resources bevat die u wilt behouden, moet u elke resource afzonderlijk verwijderen uit het deelvenster in plaats van dat u de resourcegroep verwijdert.

  1. Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
  2. Voer de naam van de resourcegroep in het vak Filteren op naam in.
  3. Selecteer in de resultatenlijst de resourcegroepnaam om een overzicht te bekijken.
  4. Selecteer Resourcegroep verwijderen.
  5. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Voer de naam van de resourcegroep in ter bevestiging en selecteer Verwijderen.

Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.

Volgende stappen

In deze zelfstudie hebt u uw ASP.NET Core-web-app ingeschakeld voor het dynamisch vernieuwen van configuratie-instellingen vanuit App Configuration. Als u wilt weten hoe u een door Azure beheerde identiteit kunt gebruiken om de toegang tot App Configuration te stroomlijnen, gaat u verder met de volgende zelfstudie.