Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
App Configuration .NET-providerbiblioteket stöder uppdatering av konfigurationen på begäran utan att ett program startas om. Den här handledningen visar hur du kan implementera dynamiska konfigurationsuppdateringar i din kod. Den bygger på appen som introducerades i snabbstarten. Du bör slutföra Skapa en .NET-app med App Configuration innan du fortsätter.
Du kan använda valfri kodredigerare för att utföra stegen i den här självstudien. Visual Studio Code är ett utmärkt alternativ som är tillgängligt på Plattformarna Windows, macOS och Linux.
I den här tutorialen lär du dig följande:
- Konfigurera .NET-appen för att uppdatera konfigurationen som svar på ändringar i ett appkonfigurationsarkiv.
- Utnyttja den senaste konfigurationen i ditt program.
Förutsättningar
Om du inte har något Azure-konto skapar du ett kostnadsfritt konto innan du börjar.
Slutför snabbstarten Skapa en .NET-app med App Configuration.
Aktivitetsstyrd konfigurationsuppdatering
Öppna Program.cs och uppdatera filen med följande kod. Du kan ansluta till App Configuration med antingen Microsoft Entra-ID (rekommenderas) eller en anslutningssträng. Följande kodfragment visar hur du använder Microsoft Entra-ID.
Du använder DefaultAzureCredential för att autentisera mot din App Configuration-butik. När du slutförde snabbstarten som listas i förutsättningarna hade du redan tilldelat dina autentiseringsuppgifter rollen AppKonfigurationsdataläsare.
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
using Azure.Identity;
IConfiguration _configuration = null;
IConfigurationRefresher _refresher = null;
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options =>
{
    string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
    options.Connect(new Uri(endpoint), new DefaultAzureCredential())            
           // Load the key-value with key "TestApp:Settings:Message" and no label
           .Select("TestApp:Settings:Message")
           // Reload configuration if any selected key-values have changed.
           .ConfigureRefresh(refresh =>
           {
               refresh.RegisterAll()
                      .SetRefreshInterval(TimeSpan.FromSeconds(10));
           })
    _refresher = options.GetRefresher();
});
_configuration = builder.Build();
Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");
// Wait for the user to press Enter
Console.ReadLine();
if (_refresher != null)
{
    await _refresher.TryRefreshAsync();
    Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");
}
              ConfigureRefresh I metoden anropar RegisterAll du metoden för att instruera appkonfigurationsprovidern att läsa in hela konfigurationen igen när den identifierar en ändring i något av de valda nyckelvärdena (i det här fallet bara TestApp:Settings:Message). Mer information om hur du övervakar konfigurationsändringar finns i Metodtips för konfigurationsuppdatering.
Metoden SetRefreshInterval anger den minsta tid som måste förflutit innan en ny begäran görs till App Configuration för att söka efter konfigurationsändringar. I det här exemplet åsidosätter du standardförfallotiden på 30 sekunder och anger en tid på 10 sekunder i stället för demonstration.
              ConfigureRefresh Om du anropar metoden ensam uppdateras inte konfigurationen automatiskt. Du anropar TryRefreshAsync metoden från gränssnittet IConfigurationRefresher för att utlösa en uppdatering. Den här designen är att undvika begäranden som skickas till App Configuration även när programmet är inaktivt. Du bör inkludera anropet TryRefreshAsync där du anser att din applikation är aktiv. Det kan till exempel vara när du bearbetar ett inkommande meddelande, en order eller en iteration av en komplex uppgift. Det kan också finnas i en timer om ditt program är aktivt kontinuerligt. I det här exemplet anropar TryRefreshAsync du varje gång du trycker på Retur-tangenten. Även om anropet TryRefreshAsync misslyckas av någon anledning fortsätter programmet att använda den cachelagrade konfigurationen. Ett annat försök görs när det konfigurerade uppdateringsintervallet har passerat och anropet utlöses av programaktiviteten TryRefreshAsync igen. Att anropa TryRefreshAsync är en no-op innan det konfigurerade uppdateringsintervallet har gått, vilket innebär att dess prestandapåverkan är minimal, även om den anropas ofta.
Uppdatering av konfiguration med hjälp av beroendeinjektion
I föregående kod sparar du manuellt en instans av IConfigurationRefresher för att anropa TryRefreshAsync. Om du använder beroendeinjektion för att lösa dina tjänster kan du också hänvisa till följande steg.
- Registrera nödvändiga App Configuration-tjänster genom att anropa - AddAzureAppConfigurationpå din- IServiceCollection.- Lägg till följande kod i Program.cs. - // Existing code in Program.cs // ... ... // Add Azure App Configuration services to IServiceCollection builder.Services.AddAzureAppConfiguration();
- Uppdatera konfigurationen genom att lösa ut en instans av - IConfigurationRefresherProviderfrån din tjänstsamling och anropa- TryRefreshAsyncpå var och en av dess uppdaterare.- class SampleConfigRefresher { private readonly IEnumerable<IConfigurationRefresher> _refreshers = null; public SampleConfigRefresher(IConfigurationRefresherProvider refresherProvider) { _refreshers = refresherProvider.Refreshers; } public async Task RefreshConfiguration() { foreach (var refresher in _refreshers) { _ = refresher.TryRefreshAsync(); } } }
Skapa och köra appen lokalt
- Ange en miljövariabel med namnet Endpoint till slutpunkten för din App Configuration-butik, som finns under Översikt i Azure-portalen. - Om du använder Windows-kommandotolken kör du följande kommando och startar om kommandotolken så att ändringen börjar gälla: - setx Endpoint "<endpoint-of-your-app-configuration-store>"- Om du använder PowerShell kör du följande kommando: - $Env:Endpoint = "<endpoint-of-your-app-configuration-store>"- Om du använder macOS eller Linux kör du följande kommando: - export Endpoint='<endpoint-of-your-app-configuration-store>'
- Kör följande kommando för att skapa konsolappen: - dotnet build
- När bygget har slutförts kör du följande kommando för att köra appen lokalt: - dotnet run  
- Logga in på Azure-portalen. Välj Alla resurser och välj den App Configuration Store-instans som du skapade i snabbstarten. 
- Välj Configuration Explorer och uppdatera värdena för följande nycklar: - Nyckel - Värde - TestApp:Inställningar:Meddelande - Data från Azure App Configuration – Uppdaterad 
- Tryck på Retur för att utlösa en uppdatering och skriv ut det uppdaterade värdet i kommandotolken eller PowerShell-fönstret.   - Anmärkning - Eftersom uppdateringsintervallet har angetts till 10 sekunder med hjälp av - SetRefreshIntervalmetoden när du anger konfigurationen för uppdateringsåtgärden uppdateras endast värdet för konfigurationsinställningen om minst 10 sekunder har förflutit sedan den senaste uppdateringen för den inställningen.
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. Om du har ett ASP.NET Core-program kan du läsa de här anvisningarna för loggning och övervakning i ASP.NET Core. Annars kan du aktivera loggning med hjälp av anvisningarna för loggning med Azure SDK.
- Loggarna matas ut på olika händelsenivåer. Standardnivån är - Informational.- Händelsenivå - Beskrivning - Utförlig - Loggarna innehåller nyckeln och etiketten för nyckelvärden som din applikation övervakar för ändringar från App Configuration-butiken. 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. - Informativt - 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å - Verbosehändelsenivå genom att ange parametern- EventLevel.Verboseenligt följande exempel. Dessa instruktioner gäller även för alla andra händelsenivåer. Det här exemplet aktiverar även loggar för endast- Microsoft-Extensions-Configuration-AzureAppConfiguration-Refreshkategorin.- using var listener = new AzureEventSourceListener((eventData, text) => { if (eventData.EventSource.Name == "Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh") { Console.WriteLine("[{1}] {0}: {2}", eventData.EventSource.Name, eventData.Level, text); } }, EventLevel.Verbose);
- Loggningskategorin är - Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh, som visas före varje logg. Här följer några exempelloggar på varje händelsenivå:- [Verbose] Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh: Key-value read from App Configuration. Change:'Modified' Key:'ExampleKey' Label:'ExampleLabel' Endpoint:'https://examplestore.azconfig.io' [Informational] Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh: Setting updated. Key:'ExampleKey' [Warning] Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh: 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'
Anmärkning
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.
- Logga in på Azure Portal och välj Resursgrupper.
- I rutan Filtrera efter namn anger du namnet på resursgruppen.
- I resultatlistan väljer du resursgruppens namn för att se en översikt.
- Välj Ta bort resursgrupp.
- 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 .NET-appen för att dynamiskt uppdatera konfigurationsinställningarna från App Configuration. Om du vill lära dig hur du använder en hanterad Azure-identitet för att effektivisera åtkomsten till App Configuration fortsätter du till nästa självstudie.