Delen via


Zelfstudie: Dynamische configuratie gebruiken in een .NET-achtergrondservice

Gegevens uit App Configuration kunnen worden geladen als app-instellingen in een .NET-toepassing. Zie de quickstart voor meer informatie. Zoals is ontworpen door .NET, kunnen de app-instellingen echter alleen worden vernieuwd wanneer de toepassing opnieuw wordt opgestart. De .NET-provider van App Configuration is een .NET Standard-bibliotheek. Het biedt ondersteuning voor het dynamisch opslaan en vernieuwen van de configuratie zonder dat de toepassing opnieuw hoeft te worden opgestart. Deze zelfstudie laat zien hoe u dynamische configuratie-updates kunt implementeren in een .NET-achtergrondservice.

In deze zelfstudie leert u het volgende:

  • Stel uw .NET-achtergrondservice in om de configuratie bij te werken als reactie op wijzigingen in een App Configuration-archief.
  • Gebruik de nieuwste configuratie in uw achtergrondservice.

Vereisten

Een sleutelwaarde toevoegen

Voeg de volgende sleutelwaarde toe aan het App Configuration-archief en laat label en inhoudstype ongewijzigd met de standaardwaarden. Ga naar Een sleutelwaarde maken voor meer informatie over het toevoegen van sleutelwaarden aan een archief met behulp van Azure Portal of de CLI.

Sleutel Weergegeven als
TestApp:Settings:Message Gegevens uit Azure-app-configuratie

Een .NET-achtergrondservice maken

U gebruikt de .NET-opdrachtregelinterface (CLI) om een nieuw .NET-app-project te maken. Het voordeel van het gebruik van de .NET CLI via Visual Studio is dat deze beschikbaar is op de Windows-, macOS- en Linux-platformen. U kunt ook de vooraf geïnstalleerde hulpprogramma's gebruiken die beschikbaar zijn in de Azure Cloud Shell.

  1. Maak een nieuwe map voor uw project.

  2. Voer in de nieuwe map de volgende opdracht uit om een nieuw .NET-achtergrondserviceproject te maken:

    dotnet new worker
    

Gegevens opnieuw laden vanuit app-configuratie

  1. Voeg verwijzingen toe aan het Microsoft.Extensions.Configuration.AzureAppConfiguration NuGet-pakket door de volgende opdracht uit te voeren:

    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  2. Voer de volgende opdracht uit om pakketten voor uw project te herstellen:

    dotnet restore
    
  3. Open Program.cs en voeg de volgende instructies toe:

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  4. Maak verbinding met App Configuration met behulp van Microsoft Entra ID (aanbevolen) of een verbindingsreeks.

    U gebruikt de DefaultAzureCredential app om u te verifiëren bij uw App Configuration-archief. Volg de instructies om uw referenties toe te wijzen aan de rol App Configuration Data Reader. Zorg ervoor dat u voldoende tijd hebt om de machtiging door te geven voordat u de toepassing uitvoert.

    // Existing code in Program.cs
    // ... ...
    
    var builder = Host.CreateApplicationBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
            // Load all keys that start with `TestApp:`.
            .Select("TestApp:*")
            // Configure to reload the key 'TestApp:Settings:Message' if it is modified.
            .ConfigureRefresh(refreshOptions =>
            {
                refreshOptions.Register("TestApp:Settings:Message");
            });
    
        // Register the refresher so that the Worker service can consume it through DI
        builder.Services.AddSingleton(options.GetRefresher());
    });
    
    // The rest of existing code in Program.cs
    // ... ...
    

    In de ConfigureRefresh methode wordt een sleutel in uw App Configuration-archief geregistreerd voor wijzigingscontrole. De Register methode heeft een optionele Booleaanse parameter refreshAll die kan worden gebruikt om aan te geven of alle configuratiewaarden moeten worden vernieuwd als de geregistreerde sleutel verandert. In dit voorbeeld wordt alleen de sleutel TestApp:Settings:Message vernieuwd. Alle instellingen die zijn geregistreerd voor vernieuwen, hebben een standaardverlooptijd van 30 seconden voordat een nieuwe vernieuwing wordt uitgevoerd. Het kan worden bijgewerkt door de methode AzureAppConfigurationRefreshOptions.SetCacheExpiration aan te roepen.

  5. Open Worker.cs. Injecteer IConfiguration en IConfigurationRefresher naar de Worker service en registreer de configuratiegegevens uit App Configuration.

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfiguration _configuration;
        private readonly IConfigurationRefresher _refresher;
    
        public Worker(ILogger<Worker> logger, IConfiguration configuration, IConfigurationRefresher refresher)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
        }
    
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                // Intentionally not await TryRefreshAsync to avoid blocking the execution.
                _refresher.TryRefreshAsync(stoppingToken);
    
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation(_configuration["TestApp:Settings:Message"] ?? "No data.");
                }
    
                await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
            }
        }
    }
    

    Als u de ConfigureRefresh methode alleen aanroept, wordt de configuratie niet automatisch vernieuwd. U roept de TryRefreshAsync methode aan vanuit de interface IConfigurationRefresher om een vernieuwing te activeren. Dit ontwerp is om aanvragen te voorkomen die naar App Configuration worden verzonden, zelfs wanneer uw toepassing niet actief is. U kunt de TryRefreshAsync aanroep opnemen waar u uw toepassing actief beschouwt. Dit kan bijvoorbeeld zijn wanneer u een binnenkomend bericht, een order of een iteratie van een complexe taak verwerkt. Het kan ook in een timer staan als uw toepassing altijd actief is. In dit voorbeeld roept TryRefreshAsync u aan telkens wanneer de achtergrondservice wordt uitgevoerd. Houd er rekening mee dat, zelfs als de aanroep TryRefreshAsync om welke reden dan ook mislukt, uw toepassing de configuratie in de cache blijft gebruiken. Er wordt nog een poging gedaan wanneer de geconfigureerde verlooptijd van de cache is verstreken en de TryRefreshAsync aanroep opnieuw wordt geactiveerd door uw toepassingsactiviteit. Bellen TryRefreshAsync is een no-op voordat de geconfigureerde cacheverlooptijd is verstreken, dus de invloed op de prestaties is minimaal, zelfs als deze vaak wordt aangeroepen.

De app lokaal bouwen en uitvoeren

  1. Stel een omgevingsvariabele in.

    Stel de omgevingsvariabele Met de naam Eindpunt in op het eindpunt van uw App Configuration-archief in het overzicht van uw winkel in Azure Portal.

    Als u de Windows-opdrachtprompt gebruikt, voert u de volgende opdracht uit en start u de opdrachtprompt opnieuw om de wijziging door te voeren:

    setx Endpoint "<endpoint-of-your-app-configuration-store>"
    

    Als u PowerShell gebruikt, voert u de volgende opdracht uit:

    $Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
    

    Als u macOS of Linux gebruikt, voert u de volgende opdracht uit:

    export Endpoint='<endpoint-of-your-app-configuration-store>'
    
  2. Voer de volgende opdracht uit om de app te bouwen.

    dotnet build
    
  3. Nadat de build is voltooid, voert u de volgende opdracht uit om de app lokaal uit te voeren.

    dotnet run
    
  4. U ziet nu de volgende uitvoer in de console.

    Schermopname van de achtergrondservice.

  5. Navigeer in Azure Portal naar Configuration Explorer van uw App Configuration-archief en werk de waarde van de volgende sleutel bij.

    Sleutel Weergegeven als
    TestApp:Settings:Message Gegevens uit Azure-app-configuratie - bijgewerkt
  6. Wacht even totdat het tijdvenster voor het vernieuwingsinterval is verstreken. U ziet dat de console-uitvoer is gewijzigd.

    Schermopname van de vernieuwde achtergrondservice.

Resources opschonen

Als u de resources die in dit artikel zijn gemaakt niet wilt blijven gebruiken, 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 .NET-achtergrondservice ingeschakeld om configuratie-instellingen dynamisch te vernieuwen vanuit App Configuration. Ga verder met de volgende zelfstudie voor meer informatie over het inschakelen van dynamische configuratie in een ASP.NET-webtoepassing:

Als u wilt weten hoe u een door Azure beheerde identiteit gebruikt om de toegang tot App Configuration te stroomlijnen, gaat u verder met de volgende zelfstudie: