Teilen über


Tutorial: Dynamische Konfiguration in einem .NET-Hintergrunddienst verwenden

Daten aus der App-Konfiguration können als App-Einstellungen in eine .NET-Anwendung geladen werden. Weitere Informationen finden Sie im Schnellstart. Wie von .NET vorgesehen, können die App-Einstellungen jedoch nur beim Neustart der Anwendung aktualisiert werden. Der .NET-Anbieter von App Configuration ist eine .NET Standard-Bibliothek. Sie unterstützt das dynamische Zwischenspeichern und Aktualisieren der Konfiguration ohne Anwendungsneustart. Dieses Tutorial zeigt, wie Sie dynamische Konfigurationsaktualisierungen in einem .NET-Hintergrunddienst implementieren können.

In diesem Tutorial lernen Sie Folgendes:

  • Einrichten Ihrer .NET Code-App für die Aktualisierung der Konfiguration als Reaktion auf Änderungen in einem App Configuration-Speicher.
  • Verbrauchen Sie die neueste Konfiguration in Ihrem Hintergrunddienst.

Voraussetzungen

Hinzufügen eines Schlüssel-Wert-Paars

Fügen Sie dem App Configuration-Speicher den folgenden Schlüsselwert hinzu, und übernehmen Sie für Bezeichnung und Inhaltstyp die Standardwerte. Weitere Informationen zum Hinzufügen von Schlüssel-Wert-Paaren zu einem Speicher mithilfe des Azure-Portals oder der CLI finden Sie unter Erstellen eines Schlüssel-Wert-Paars.

Schlüssel Wert
TestApp:Settings:Message Daten aus Azure App Configuration

Erstellen Sie einen .NET-Hintergrunddienst

Sie verwenden die .NET-Befehlszeilenschnittstelle (CLI), um ein neues .NET-App-Projekt zu erstellen.llen. Der Vorteil bei Verwendung der .NET-CLI gegenüber Visual Studio ist, dass sie für alle Windows-, macOS- und Linux-Plattformen verfügbar ist. Verwenden Sie alternativ die vorinstallierten Tools, die in Azure Cloud Shell verfügbar sind.

  1. Erstellen Sie einen neuen Ordner für Ihr Projekt.

  2. Führen Sie in dem neuen Ordner den folgenden Befehl aus, um ein neues .NET-Hintergrunddienstprojekt zu erstellen:

    dotnet new worker
    

Erneutes Laden von Daten aus App Configuration

  1. Fügen Sie Referenzen zu dem NuGet-Paket Microsoft.Extensions.Configuration.AzureAppConfiguration hinzu, indem Sie den folgenden Befehl ausführen:

    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  2. Führen Sie den folgenden Befehl aus, um Pakete für Ihr Projekt wiederherzustellen:

    dotnet restore
    
  3. Öffnen Sie Program.cs, und fügen Sie die folgenden Anweisungen hinzu:

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  4. Verbinden Sie sich mit der App-Konfiguration.

    // Existing code in Program.cs
    // ... ...
    
    var builder = Host.CreateApplicationBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
            // 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 der Methode ConfigureRefresh wird ein Schlüssel in Ihrem App Configuration-Speicher für die Änderungsüberwachung registriert. Die Methode Register enthält den optionalen booleschen Parameter refreshAll, mit dem angegeben werden kann, ob alle Konfigurationswerte bei einer Änderung des registrierten Schlüssels aktualisiert werden sollen. In diesem Beispiel wird nur der Schlüssel TestApp:Settings:Message aktualisiert. Alle für die Aktualisierung registrierten Einstellungen haben einen standardmäßigen Cache-Ablauf von 30 Sekunden, bevor eine neue Aktualisierung versucht wird. Dieser kann durch Aufrufen der Methode AzureAppConfigurationRefreshOptions.SetCacheExpiration aktualisiert werden.

  5. Öffnen Sie Worker.cs. Injizieren Sie IConfigurationund IConfigurationRefresher in den WorkerDienst und protokollieren Sie die Konfigurationsdaten von 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);
            }
        }
    }
    

    Das Aufrufen der Methode ConfigureRefresh allein führt nicht dazu, dass die Konfiguration automatisch aktualisiert wird. Sie rufen die Methode TryRefreshAsync über die Schnittstelle IConfigurationRefresher auf, um eine Aktualisierung auszulösen. Dieses Design soll verhindern, dass Anfragen an die App Configuration gesendet werden, selbst wenn Ihre Anwendung im Leerlauf ist. Sie können den Aufruf TryRefreshAsync dort verwenden, wo Sie Ihre Anwendung als aktiv betrachten. Dies kann beispielsweise der Fall sein, wenn Sie eine eingehende Nachricht, eine Bestellung oder eine Iteration einer komplexen Aufgabe verarbeiten. Er kann auch Teil eines Timers sein, wenn Ihre Anwendung ständig aktiv ist. In diesem Beispiel rufen Sie TryRefreshAsyncjedes Mal auf, wenn der Hintergrunddienst ausgeführt wird. Beachten Sie, dass Ihre Anwendung auch dann weiterhin die zwischengespeicherte Konfiguration verwendet, wenn beim Aufruf TryRefreshAsync aus irgendeinem Grund ein Fehler auftritt. Ein weiterer Versuch wird unternommen, wenn die konfigurierte Cacheablaufzeit verstrichen ist und der Aufruf TryRefreshAsync von Ihrer Anwendungsaktivität erneut ausgelöst wird. Das Aufrufen von TryRefreshAsync ist vor Verstreichen der konfigurierten Cacheablaufzeit keine Option. Daher sind die Auswirkungen auf die Leistung minimal, auch wenn der Aufruf häufig erfolgt.

Lokales Erstellen und Ausführen der App

  1. Legen Sie eine Umgebungsvariable mit dem Namen ConnectionString fest, und geben Sie dafür den Zugriffsschlüssel für Ihren App Configuration-Speicher an. Führen Sie in der Befehlszeile den folgenden Befehl aus.

    Um die App lokal über die Windows-Eingabeaufforderung zu erstellen und auszuführen, führen Sie den folgenden Befehl aus.

    setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Starten Sie die Eingabeaufforderung neu, damit die Änderung wirksam wird. Geben Sie den Wert der Umgebungsvariablen aus, um zu überprüfen, ob er richtig festgelegt wurde.

  2. Führen Sie den folgenden Befehl aus, um die App zu erstellen:

    dotnet build
    
  3. Nachdem der Build erfolgreich abgeschlossen wurde, führen Sie den folgenden Befehl aus, um die App lokal auszuführen.

    dotnet run
    
  4. Die folgenden Ausgaben sollten an der Konsole angezeigt werden.

    Screenshot des Hintergrunddiensts.

  5. Navigieren Sie im Azure-Portal zum Konfigurations-Explorer Ihres App Configuration-Speichers, und aktualisieren Sie den Wert des folgenden Schlüssels.

    Key Wert
    TestApp:Settings:Message Daten aus Azure App Configuration: Aktualisiert
  6. Warten Sie ein paar Augenblicke, bis das Zeitfenster für das Aktualisierungsintervall abgelaufen ist. Sie sehen, dass sich die Konsolenausgaben geändert haben.

    Screenshot des aktualisierten Hintergrunddiensts.

Bereinigen von Ressourcen

Wenn Sie die in diesem Artikel erstellten Ressourcen nicht mehr verwenden möchten, löschen Sie die erstellte Ressourcengruppe, um Kosten zu vermeiden.

Wichtig

Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Die Ressourcengruppe und alle darin enthaltenen Ressourcen werden unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Falls Sie die Ressourcen für diesen Artikel in einer Ressourcengruppe erstellt haben, die andere beizubehaltende Ressourcen enthält, löschen Sie die Ressourcen einzeln über den entsprechenden Bereich, statt die Ressourcengruppe zu löschen.

  1. Melden Sie sich beim Azure-Portal an, und klicken Sie auf Ressourcengruppen.
  2. Geben Sie im Feld Nach Name filtern den Namen Ihrer Ressourcengruppe ein.
  3. Wählen Sie in der Ergebnisliste den Ressourcengruppennamen aus, um eine Übersicht anzuzeigen.
  4. Wählen Sie die Option Ressourcengruppe löschen.
  5. Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie zur Bestätigung den Namen Ihrer Ressourcengruppe ein, und klicken Sie auf Löschen.

Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.

Nächste Schritte

In diesem Lernprogramm haben Sie Ihren .NET-Hintergrunddienst aktiviert, um die Konfigurationseinstellungen aus der App-Konfiguration dynamisch zu aktualisieren. Um zu erfahren, wie Sie die dynamische Konfiguration in einer ASP.NET-Webanwendung aktivieren können, fahren Sie mit dem nächsten Lernprogramm fort:

Im nächsten Tutorial erfahren Sie, wie Sie eine von Azure verwaltete Identität hinzufügen, um den Zugriff auf App Configuration zu optimieren: