Samouczek: używanie konfiguracji dynamicznej w aplikacji internetowej ASP.NET (.NET Framework)

Dane z App Configuration można załadować jako ustawienia aplikacji w aplikacji .NET Framework. Aby uzyskać więcej informacji, zobacz przewodnik Szybki start. Jednak zgodnie z projektem .NET Framework ustawienia aplikacji mogą być odświeżane tylko po ponownym uruchomieniu aplikacji. Dostawca platformy .NET App Configuration jest biblioteką .NET Standard. Obsługuje ona buforowanie i odświeżanie konfiguracji dynamicznie bez ponownego uruchamiania aplikacji. W tym samouczku pokazano, jak wdrożyć aktualizacje dynamicznej konfiguracji w aplikacji ASP.NET Web Forms. Ta sama technika dotyczy aplikacji MVC .NET Framework.

Ten samouczek zawiera informacje na temat wykonywania następujących czynności:

  • Skonfiguruj aplikację internetową ASP.NET w celu zaktualizowania jej konfiguracji w odpowiedzi na zmiany w magazynie App Configuration.
  • Wstrzykiwanie najnowszej konfiguracji w żądaniach do aplikacji.

Wymagania wstępne

Dodawanie par klucz-wartości

Dodaj następujące wartości klucza do magazynu App Configuration i pozostaw wartości domyślne Etykieta i Typ zawartości. Aby uzyskać więcej informacji na temat dodawania par klucz-wartości do magazynu przy użyciu Azure Portal lub interfejsu wiersza polecenia, przejdź do tematu Tworzenie klucza-wartość.

Klucz Wartość
TestApp:Settings:BackgroundColor Biały
TestApp:Settings:FontColor Czarnoskórzy
TestApp:Settings:FontSize 40
TestApp:Settings:Message Dane z usługi Azure App Configuration
TestApp:Settings:Sentinel Wersja 1

Tworzenie aplikacji internetowej ASP.NET

  1. Uruchom program Visual Studio i wybierz pozycję Utwórz nowy projekt.

  2. Wybierz pozycję ASP.NET Aplikacja internetowa (.NET Framework) z listy szablonów projektu i naciśnij przycisk Dalej.

  3. W obszarze Konfigurowanie nowego projektu wprowadź nazwę projektu. W obszarze Struktura wybierz pozycję .NET Framework 4.7.2 lub nowszej. Naciśnij przycisk Utwórz.

  4. W obszarze Utwórz nową aplikację internetową ASP.NET wybierz pozycję Web Forms. Naciśnij przycisk Utwórz.

Ponowne ładowanie danych z usługi App Configuration

  1. Kliknij projekt prawym przyciskiem myszy i wybierz polecenie Zarządzaj pakietami NuGet. Na karcie Przeglądaj wyszukaj i dodaj do projektu najnowszą wersję następującego pakietu NuGet.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. Otwórz plik Global.asax.cs i dodaj następujące przestrzenie nazw.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Dodaj do klasy następujące statyczne zmienne Global składowe.

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. Dodaj metodę Application_Start do Global klasy . Jeśli metoda już istnieje, dodaj do niej następujący kod.

    protected void Application_Start(object sender, EventArgs e)
    {
        ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    // Load all keys that start with `TestApp:` and have no label.
                    .Select("TestApp:*")
                    // Configure to reload configuration if the registered key 'TestApp:Settings:Sentinel' is modified.
                    .ConfigureRefresh(refresh => 
                    {
                        refresh.Register("TestApp:Settings:Sentinel", refreshAll:true)
                               .SetCacheExpiration(new TimeSpan(0, 5, 0));
                    });
            _configurationRefresher = options.GetRefresher();
        });
    
        Configuration = builder.Build();
    }
    

    Metoda jest wywoływana Application_Start przy pierwszym żądaniu do aplikacji internetowej. Jest on wywoływany tylko raz podczas cyklu życia aplikacji. W związku z tym warto zainicjować IConfiguration obiekt i załadować dane z App Configuration.

    W metodzie ConfigureRefresh klucz w magazynie App Configuration jest zarejestrowany do monitorowania zmian. Parametr refreshAll metody Register wskazuje, że wszystkie wartości konfiguracji powinny zostać odświeżone, jeśli zarejestrowany klucz ulegnie zmianie. W tym przykładzie klucz TestApp:Settings:Sentinel to klucz sentinel aktualizowany po zakończeniu zmiany wszystkich innych kluczy. Po wykryciu zmiany aplikacja odświeża wszystkie wartości konfiguracji. Takie podejście pomaga zapewnić spójność konfiguracji w aplikacji w porównaniu do monitorowania wszystkich kluczy pod kątem zmian.

    Metoda SetCacheExpiration określa minimalny czas, który musi upłynąć, zanim zostanie wykonane nowe żądanie, aby App Configuration sprawdzić, czy nie wprowadzono zmian w konfiguracji. W tym przykładzie zastąpisz domyślny czas wygaśnięcia 30 sekund, określając zamiast tego czas 5 minut. Zmniejsza to potencjalną liczbę żądań wysyłanych do magazynu App Configuration.

  5. Dodaj metodę Application_BeginRequest do Global klasy . Jeśli metoda już istnieje, dodaj do niej następujący kod.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        _ = _configurationRefresher.TryRefreshAsync();
    }
    

    ConfigureRefresh Wywołanie samej metody nie spowoduje automatycznego odświeżenia konfiguracji. Metoda jest wywoływana TryRefreshAsync na początku każdego żądania, aby zasygnalizować odświeżanie. Dzięki temu aplikacja wysyła żądania tylko do App Configuration, gdy aktywnie odbiera żądania.

    Wywołanie TryRefreshAsync jest operacją no-op przed upływem skonfigurowanego czasu wygaśnięcia pamięci podręcznej, więc jej wpływ na wydajność jest minimalny. Po wysłaniu żądania do App Configuration, ponieważ nie czekasz na zadanie, konfiguracja jest odświeżona asynchronicznie bez blokowania wykonywania bieżącego żądania. Bieżące żądanie może nie pobrać zaktualizowanych wartości konfiguracji, ale kolejne żądania będą wykonywać.

    Jeśli wywołanie TryRefreshAsync zakończy się niepowodzeniem z jakiegokolwiek powodu, aplikacja będzie nadal używać konfiguracji buforowanej. Kolejna próba zostanie podjęta, gdy skonfigurowany czas wygaśnięcia pamięci podręcznej ponownie upłynął, a TryRefreshAsync wywołanie zostanie wyzwolone przez nowe żądanie do aplikacji.

Używanie najnowszych danych konfiguracji

  1. Otwórz plik Default.aspx i zastąp jego zawartość następującym znacznikiem. Upewnij się, że atrybut Dziedziczy jest zgodny z przestrzenią nazw i nazwą klasy aplikacji.

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormApp.Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Azure App Configuration Web Forms Demo</title>
    </head>
    <body id="body" runat="server">
        <form id="form1" runat="server">
            <div style="text-align: center">
                <asp:Label ID="message" runat="server" />
            </div>
        </form>
    </body>
    </html>
    
  2. Otwórz plik Default.aspx.cs i zaktualizuj go przy użyciu następującego kodu.

    using System;
    using System.Web.UI.WebControls;
    
    namespace WebFormApp
    {
        public partial class Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                // Read configuration from the IConfiguration object loaded from Azure App Configuration
                string messageText = Global.Configuration["TestApp:Settings:Message"] ?? "Please add the key \"TestApp:Settings:Message\" in your Azure App Configuration store.";
                string messageFontSize = Global.Configuration["TestApp:Settings:FontSize"] ?? "20";
                string messageFontColor = Global.Configuration["TestApp:Settings:FontColor"] ?? "Black";
                string backgroundColor = Global.Configuration["TestApp:Settings:BackgroundColor"] ?? "White";
    
                message.Text = messageText;
                message.Font.Size = FontUnit.Point(int.Parse(messageFontSize));
                message.ForeColor = System.Drawing.Color.FromName(messageFontColor);
                body.Attributes["bgcolor"] = backgroundColor;
            }
        }
    }
    

Kompilowanie i uruchamianie aplikacji

  1. Ustaw zmienną środowiskową o nazwie ConnectionString na parametry połączenia klucza tylko do odczytu uzyskane podczas tworzenia magazynu App Configuration.

    Jeśli używasz wiersza polecenia systemu Windows, uruchom następujące polecenie:

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

    Jeśli używasz Windows PowerShell, uruchom następujące polecenie:

    $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    
  2. Uruchom ponownie program Visual Studio, aby umożliwić zastosowanie zmiany.

  3. Naciśnij klawisze Ctrl + F5, aby skompilować i uruchomić aplikację internetową.

    Uruchamianie aplikacji lokalnie

  4. W Azure Portal przejdź do Eksploratora konfiguracji magazynu App Configuration i zaktualizuj wartość następujących kluczy. Pamiętaj, aby zaktualizować klucz sentinel TestApp:Settings:Sentinel w końcu.

    Klucz Wartość
    TestApp:Settings:BackgroundColor Green (Zielony)
    TestApp:Settings:FontColor LightGray
    TestApp:Settings:Message Dane z usługi Azure App Configuration — teraz z aktualizacjami na żywo!
    TestApp:Settings:Sentinel Wersja 2
  5. Odśwież stronę przeglądarki, aby zobaczyć nowe ustawienia konfiguracji. Może być konieczne odświeżenie więcej niż raz, aby zmiany zostały odzwierciedlone lub zmienić czas wygaśnięcia pamięci podręcznej na mniej niż 5 minut.

    Odświeżanie aplikacji lokalnie

Uwaga

Przykładowy kod używany w tym samouczku można pobrać z repozytorium Azure App Configuration GitHub.

Czyszczenie zasobów

Jeśli nie chcesz kontynuować korzystania z zasobów utworzonych w tym artykule, usuń utworzoną tutaj grupę zasobów, aby uniknąć naliczania opłat.

Ważne

Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów i wszystkie zasoby w niej są trwale usuwane. Upewnij się, że nie usunięto przypadkowo nieprawidłowej grupy zasobów ani zasobów. Jeśli zasoby dla tego artykułu zostały utworzone w grupie zasobów zawierającej inne zasoby, które chcesz zachować, usuń każdy zasób indywidualnie z odpowiedniego okienka zamiast usuwania grupy zasobów.

  1. Zaloguj się do Azure Portal i wybierz pozycję Grupy zasobów.
  2. W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
  3. Na liście wyników wybierz nazwę grupy zasobów, aby wyświetlić przegląd.
  4. Wybierz pozycję Usuń grupę zasobów.
  5. Zobaczysz prośbę o potwierdzenie usunięcia grupy zasobów. Wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.

Po kilku chwilach grupa zasobów i wszystkie jej zasoby zostaną usunięte.

Następne kroki

W tym samouczku włączono aplikację ASP.NET Web Forms, aby dynamicznie odświeżyć ustawienia konfiguracji z App Configuration. Aby dowiedzieć się, jak włączyć konfigurację dynamiczną w aplikacji .NET Framework, przejdź do następnego samouczka:

Aby dowiedzieć się, jak używać tożsamości zarządzanej platformy Azure w celu usprawnienia dostępu do App Configuration, przejdź do następnego samouczka: