Share via


Självstudie: Använda dynamisk konfiguration i en ASP.NET Core-app

Den här självstudien visar hur du kan aktivera dynamiska konfigurationsuppdateringar i en ASP.NET Core-app. Den bygger på den webbapp som introducerades i snabbstarterna. Appen använder appkonfigurationsproviderbiblioteket för sin inbyggda konfigurationscachelagring och uppdateringsfunktioner. Innan du fortsätter slutför du Skapa en ASP.NET Core-app med App Configuration först.

I den här självstudien lär du dig att:

  • Konfigurera din app för att uppdatera konfigurationen som svar på ändringar i ett appkonfigurationsarkiv.
  • Mata in den senaste konfigurationen i din app.

Förutsättningar

Slutför snabbstarten: Skapa en ASP.NET Core-app med App Configuration.

Lägga till en sentinel-nyckel

En sentinel-nyckel är en nyckel som du uppdaterar när du har slutfört ändringen av alla andra nycklar. Appen övervakar sentinel-nyckeln. När en ändring identifieras uppdaterar appen alla konfigurationsvärden. Den här metoden hjälper till att säkerställa konsekvensen i konfigurationen i din app och minskar det totala antalet begäranden som görs till appkonfigurationsarkivet, jämfört med övervakning av alla nycklar för ändringar.

  1. Öppna appkonfigurationsarkivet i Azure-portalen och välj Konfigurationsutforskaren > Skapa > nyckelvärde.
  2. För Nyckel anger du TestApp:Inställningar:Sentinel. Ange 1 som Värde. Lämna Etikett och Innehållstyp tom.
  3. Välj Använd.

Läsa in data på nytt från App Configuration

  1. Öppna Program.cs och uppdatera metoden AddAzureAppConfiguration som du lade till tidigare under snabbstarten.

    // Load configuration from Azure App Configuration
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(connectionString)
               // Load all keys that start with `TestApp:` and have no label
               .Select("TestApp:*", LabelFilter.Null)
               // Configure to reload configuration if the registered sentinel key is modified
               .ConfigureRefresh(refreshOptions =>
                    refreshOptions.Register("TestApp:Settings:Sentinel", refreshAll: true));
    });
    

    Metoden Select används för att läsa in alla nyckelvärden vars nyckelnamn börjar med TestApp: och som inte har någon etikett. Du kan anropa Select metoden mer än en gång för att läsa in konfigurationer med olika prefix eller etiketter. Om du delar ett App Configuration Store med flera appar hjälper den här metoden till att läsa in konfiguration som endast är relevant för din aktuella app i stället för att läsa in allt från din butik.

    ConfigureRefresh I metoden registrerar du nycklar som du vill övervaka för ändringar i appkonfigurationsarkivet. Parametern refreshAll till Register metoden anger att alla konfigurationer som du har angett med Select metoden läses in igen om den registrerade nyckeln ändras.

    Dricks

    Du kan lägga till ett anrop till refreshOptions.SetCacheExpiration metoden för att ange den minsta tiden mellan konfigurationsuppdateringarna. I det här exemplet använder du standardvärdet 30 sekunder. Justera till ett högre värde om du behöver minska antalet begäranden som görs till appkonfigurationsarkivet.

  2. Lägg till Mellanprogram för Azure App Configuration i tjänstsamlingen för din app.

    Uppdatera Program.cs med följande kod.

    // Existing code in Program.cs
    // ... ...
    
    builder.Services.AddRazorPages();
    
    // Add Azure App Configuration middleware to the container of services.
    builder.Services.AddAzureAppConfiguration();
    
    // Bind configuration "TestApp:Settings" section to the Settings object
    builder.Services.Configure<Settings>(builder.Configuration.GetSection("TestApp:Settings"));
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    
  3. UseAzureAppConfiguration Anropa metoden. Det gör att din app kan använda appkonfigurationens mellanprogram för att uppdatera konfigurationen automatiskt.

    Uppdatera Program.cs med följande kod.

    // Existing code in Program.cs
    // ... ...
    
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    // Use Azure App Configuration middleware for dynamic configuration refresh.
    app.UseAzureAppConfiguration();
    
    // The rest of existing code in program.cs
    // ... ...
    

Du har konfigurerat appen så att den använder alternativmönstret i ASP.NET Core under snabbstarten. När den underliggande konfigurationen av din app uppdateras från App Configuration uppdateras ditt starkt skrivna objekt som hämtas Settings via IOptionsSnapshot<T> automatiskt. Observera att du inte bör använda om IOptions<T> dynamisk konfigurationsuppdatering önskas eftersom den inte läser konfigurationsdata när appen har startats.

Uppdatering av begärd konfiguration

Konfigurationsuppdateringen utlöses av inkommande begäranden till webbappen. Ingen uppdatering sker om appen är inaktiv. När appen är aktiv övervakar mellanprogrammet App Configuration sentinel-nyckeln eller andra nycklar som du har registrerat för uppdatering i anropet ConfigureRefresh . Mellanprogrammet utlöses vid varje inkommande begäran till din app. Mellanprogrammet skickar dock bara begäranden för att kontrollera värdet i App Configuration när cachens förfallotid har passerat.

  • Om en begäran till App Configuration för ändringsidentifiering misslyckas fortsätter appen att använda den cachelagrade konfigurationen. Nya försök att söka efter ändringar görs regelbundet medan det finns nya inkommande begäranden till din app.
  • Konfigurationsuppdateringen sker asynkront vid bearbetningen av appens inkommande begäranden. Den blockerar eller saktar inte ned den inkommande begäran som utlöste uppdateringen. Begäran som utlöste uppdateringen kanske inte hämtar de uppdaterade konfigurationsvärdena, men senare begäranden får nya konfigurationsvärden.
  • För att säkerställa att mellanprogrammet utlöses anropar app.UseAzureAppConfiguration() du metoden så tidigt som möjligt i din pipeline för begäran så att ett annat mellanprogram inte hoppar över den i din app.

Skapa och köra appen lokalt

  1. Om du vill skapa appen med hjälp av .NET CLI kör du följande kommando i kommandogränssnittet:

        dotnet build
    
  2. När bygget har slutförts kör du följande kommando för att köra webbappen lokalt:

        dotnet run
    
  3. Öppna ett webbläsarfönster och gå till den URL som visas i dotnet run utdata.

    Launching quickstart app locally

  4. Logga in på Azure-portalen. Välj Alla resurser och välj appkonfigurationsarkivet som du skapade i snabbstarten.

  5. Välj Konfigurationsutforskaren och uppdatera värdena för följande nycklar. Kom ihåg att äntligen uppdatera sentinel-nyckeln.

    Tangent Värde
    TestApp:Settings:BackgroundColor grön
    TestApp:Settings:FontColor lightGray
    TestApp:Settings:Message Data från Azure App Configuration – nu med live-uppdateringar!
    TestApp:Inställningar:Sentinel 2
  6. Uppdatera webbläsaren några gånger. När cacheminnet upphör att gälla efter 30 sekunder visas sidan med uppdaterat innehåll.

    Launching updated quickstart app locally

Loggning och övervakning

Loggarna matas ut vid konfigurationsuppdateringen och innehåller detaljerad information om nyckelvärden som hämtats från appkonfigurationsarkivet och konfigurationsändringar som gjorts i ditt program.

  • Ett standardvärde ILoggerFactory läggs till automatiskt när services.AddAzureAppConfiguration() anropas. Appkonfigurationsprovidern använder detta ILoggerFactory för att skapa en instans av ILogger, som matar ut loggarna. ASP.NET Core använder ILogger för loggning som standard, så du behöver inte göra ytterligare kodändringar för att aktivera loggning för appkonfigurationsprovidern.

  • Loggarna matas ut på olika loggnivåer. Standardnivån är Information.

    Loggningsnivå beskrivning
    Felsöka Loggarna innehåller nyckeln och etiketten för nyckelvärden som programmet övervakar för ändringar från appkonfigurationsarkivet. Informationen innehåller även om nyckelvärdet har ändrats jämfört med vad programmet redan har läst in. Aktivera loggar på den här nivån för att felsöka ditt program om en konfigurationsändring inte skedde som förväntat.
    Information Loggarna innehåller nycklarna för konfigurationsinställningar som uppdateras under en konfigurationsuppdatering. Värden för konfigurationsinställningar utelämnas från loggen för att undvika läckage av känsliga data. Du kan övervaka loggar på den här nivån för att säkerställa att programmet hämtar förväntade konfigurationsändringar.
    Varning Loggarna omfattar fel och undantag som inträffade under konfigurationsuppdateringen. Tillfälliga förekomster kan ignoreras eftersom konfigurationsprovidern fortsätter att använda cachelagrade data och försöker uppdatera konfigurationen nästa gång. Du kan övervaka loggar på den här nivån för repetitiva varningar som kan tyda på potentiella problem. Du roterade till exempel anslutningssträng men glömde att uppdatera programmet.

    Du kan aktivera loggning på Debug loggnivå genom att lägga till följande exempel i appsettings.json filen. Det här exemplet gäller även för alla andra loggnivåer.

    "Logging": {
        "LogLevel": {
            "Microsoft.Extensions.Configuration.AzureAppConfiguration": "Debug"
        }
    }
    
  • Loggningskategorin är Microsoft.Extensions.Configuration.AzureAppConfiguration.Refresh, som visas före varje logg. Här är några exempelloggar på varje loggnivå:

    dbug: Microsoft.Extensions.Configuration.AzureAppConfiguration.Refresh[0]
        Key-value read from App Configuration. Change:'Modified' Key:'ExampleKey' Label:'ExampleLabel' Endpoint:'https://examplestore.azconfig.io'
    
    info: Microsoft.Extensions.Configuration.AzureAppConfiguration.Refresh[0]
        Setting updated. Key:'ExampleKey'
    
    warn: Microsoft.Extensions.Configuration.AzureAppConfiguration.Refresh[0]
        A refresh operation failed while resolving a Key Vault reference.
    Key vault error. ErrorCode:'SecretNotFound' Key:'ExampleKey' Label:'ExampleLabel' Etag:'6LaqgBQM9C_Do2XyZa2gAIfj_ArpT52-xWwDSLb2hDo' SecretIdentifier:'https://examplevault.vault.azure.net/secrets/ExampleSecret'
    

Att använda ILogger är den föredragna metoden i ASP.NET program och prioriteras som loggningskälla om en instans av ILoggerFactory finns. Men om ILoggerFactory det inte är tillgängligt kan loggarna aktiveras och konfigureras via anvisningarna för .NET Core-appar. Mer information finns i loggning i .NET Core och ASP.NET Core.

Kommentar

Loggning är tillgänglig om du använder version 6.0.0 eller senare av något av följande paket.

  • Microsoft.Extensions.Configuration.AzureAppConfiguration
  • Microsoft.Azure.AppConfiguration.AspNetCore
  • Microsoft.Azure.AppConfiguration.Functions.Worker

Rensa resurser

Om du inte vill fortsätta använda resurserna som skapas i den här artikeln tar du bort resursgruppen som du skapade här för att undvika avgifter.

Viktigt!

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser i den tas bort permanent. Se till att du inte oavsiktligt tar bort fel resursgrupp eller resurser. Om du har skapat resurserna för den här artikeln i en resursgrupp som innehåller andra resurser som du vill behålla tar du bort varje resurs individuellt från respektive fönster i stället för att ta bort resursgruppen.

  1. Logga in på Azure-portalen och välj Resursgrupper.
  2. I rutan Filtrera efter namn anger du namnet på resursgruppen.
  3. I resultatlistan väljer du resursgruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resursgruppen för att bekräfta och välj Ta bort.

Efter en liten stund tas resursgruppen och alla dess resurser bort.

Nästa steg

I den här självstudien har du aktiverat din ASP.NET Core-webbapp för att dynamiskt uppdatera konfigurationsinställningarna från App Configuration. Om du vill lära dig hur du använder en Azure-hanterad identitet för att effektivisera åtkomsten till App Configuration fortsätter du till nästa självstudie.