Oktatóanyag: Dinamikus konfiguráció használata .NET-alkalmazásban

Az alkalmazáskonfiguráció .NET-szolgáltatói kódtára támogatja a konfiguráció igény szerinti frissítését anélkül, hogy az alkalmazás újraindulhat. Ez az oktatóanyag bemutatja, hogyan implementálhat dinamikus konfigurációs frissítéseket a kódban. A rövid útmutatóban bemutatott alkalmazásra épül. A folytatás előtt fejezze be a .NET-alkalmazás létrehozását az alkalmazáskonfigurációval .

Az oktatóanyag lépéseit bármely kódszerkesztővel elvégezheti. A Visual Studio Code kiváló lehetőség, amely Windows, macOS és Linux platformokon érhető el.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Állítsa be a .NET-alkalmazást úgy, hogy az alkalmazáskonfigurációs áruház változásaira reagálva frissítse a konfigurációját.
  • Használja az alkalmazás legújabb konfigurációját.

Előfeltételek

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Fejezze be a .NET-alkalmazás létrehozása az alkalmazáskonfigurációval című rövid útmutatót.

Tevékenységalapú konfigurációfrissítés

Nyissa meg Program.cs , és frissítse a fájlt az alábbi kóddal.

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;

IConfiguration _configuration = null;
IConfigurationRefresher _refresher = null;

var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options =>
{
    options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
            .ConfigureRefresh(refresh =>
            {
                refresh.Register("TestApp:Settings:Message")
                       .SetCacheExpiration(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!");

}

A metódusban az ConfigureRefresh Alkalmazáskonfigurációs áruházban lévő kulcs regisztrálva van a változásfigyeléshez. A Register metódus rendelkezik egy választható logikai paramétersel refreshAll , amellyel jelezhető, hogy az összes konfigurációs értéket frissíteni kell-e, ha a regisztrált kulcs megváltozik. Ebben a példában csak a TestApp:Gépház:Message kulcs lesz frissítve. A SetCacheExpiration metódus megadja azt a minimális időt, amelyet az alkalmazáskonfigurációra irányuló új kérés előtt el kell végezni az esetleges konfigurációmódosítások ellenőrzéséhez. Ebben a példában felülbírálja az alapértelmezett 30 másodperces lejárati időt, és ehelyett 10 másodperces időt ad meg bemutató célokra.

Ha egyedül hívja meg a ConfigureRefresh metódust, az nem fogja automatikusan frissíteni a konfigurációt. A felületről meghívja a TryRefreshAsyncIConfigurationRefresher metódust a frissítés indításához. Ennek a tervnek az a célja, hogy elkerülje az alkalmazáskonfigurációnak küldött kéréseket, még akkor is, ha az alkalmazás tétlen. Azt a hívást is bele kell foglalnia TryRefreshAsync , amelyben aktívnak tartja az alkalmazást. Ez lehet például egy bejövő üzenet, egy rendelés vagy egy összetett feladat iterációja. Időzítőben is lehet, ha az alkalmazás folyamatosan aktív. Ebben a példában minden alkalommal meghívja TryRefreshAsync , amikor lenyomja az Enter billentyűt. Még akkor is, ha a hívás TryRefreshAsync bármilyen okból meghiúsul, az alkalmazás továbbra is a gyorsítótárazott konfigurációt használja. Egy másik kísérlet akkor történik, amikor a konfigurált gyorsítótár lejárati ideje lejárt, és a TryRefreshAsync hívást ismét az alkalmazástevékenység aktiválja. A hívás TryRefreshAsync nem működik a konfigurált gyorsítótár lejárati ideje előtt, így a teljesítményre gyakorolt hatása minimális, még akkor is, ha gyakran hívják.

Konfigurációfrissítés függőséginjektálással

Az előző kódban manuálisan ment egy példányt IConfigurationRefresher a meghíváshoz TryRefreshAsync. Ha függőséginjektálást használ a szolgáltatások feloldásához, az alábbi lépésekre is hivatkozhat.

  1. Regisztrálja a szükséges alkalmazáskonfigurációs szolgáltatásokat a saját parancsára IServiceCollectionvaló meghívássalAddAzureAppConfiguration.

    Adja hozzá a következő kódot a Program.cs.

    // Existing code in Program.cs
    // ... ...
    
    // Add Azure App Configuration services to IServiceCollection
    builder.Services.AddAzureAppConfiguration();
    
  2. Frissítse a konfigurációt a szolgáltatásgyűjtemény egy példányának IConfigurationRefresherProvider feloldásával és TryRefreshAsync az egyes frissítők meghívásával.

    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();
            }
        }
    }
    

Az alkalmazás helyi létrehozása és futtatása

  1. Állítson be egy Csatlakozás ionString nevű környezeti változót, és állítsa be az App Configuration Store hozzáférési kulcsára. Ha a Windows parancssorát használja, futtassa a következő parancsot, és indítsa újra a parancssort a módosítás érvénybe lépésének engedélyezéséhez:

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

    Windows PowerShell használata esetén futtassa a következő parancsot:

     $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    MacOS vagy Linux használata esetén futtassa a következő parancsot:

     export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Futtassa a következő parancsot a konzolalkalmazás létrehozásához:

     dotnet build
    
  3. A build sikeres befejezése után futtassa a következő parancsot az alkalmazás helyi futtatásához:

     dotnet run
    

    Quickstart app launch local

  4. Jelentkezzen be az Azure Portalra. Válassza az Összes erőforrás lehetőséget, és válassza ki a rövid útmutatóban létrehozott App Configuration Store-példányt.

  5. Válassza a Konfigurációkezelőt, és frissítse az alábbi kulcsok értékeit:

    Kulcs Érték
    TestApp:Gépház:Message Adatok Azure-alkalmazás konfigurációból – Frissítve
  6. A frissítés indításához és a frissített érték nyomtatásához nyomja le az Enter billentyűt a Parancssor vagy a PowerShell ablakban.

    Quickstart app refresh local

    Feljegyzés

    Mivel a gyorsítótár lejárati ideje a metódus használatával 10 másodpercre lett beállítva a SetCacheExpiration frissítési művelet konfigurációjának megadásakor, a konfigurációs beállítás értéke csak akkor frissül, ha a beállítás legutóbbi frissítése óta legalább 10 másodperc telt el.

Naplózás és figyelés

A naplók konfigurációfrissítéskor jelennek meg, és részletes információkat tartalmaznak az Alkalmazáskonfigurációs áruházból lekért kulcsértékekről és az alkalmazás konfigurációs módosításairól. Ha ASP.NET Core-alkalmazásával rendelkezik, tekintse meg a ASP.NET Core naplózására és figyelésére vonatkozó utasításokat. Ellenkező esetben engedélyezheti a naplózást az Azure SDK-val való naplózásra vonatkozó utasítások használatával.

  • A naplók különböző eseményszinteken jelennek meg. Az alapértelmezett szint a .Informational

    Eseményszint Leírás
    Részletezés A naplók tartalmazzák az alkalmazás által figyelt kulcsértékek kulcsát és címkéjét az Alkalmazáskonfigurációs áruház módosításaihoz. Az információk azt is tartalmazzák, hogy a kulcs értéke megváltozott-e az alkalmazás által betöltött adatokhoz képest. Engedélyezze a naplókat ezen a szinten az alkalmazás hibaelhárításához, ha a konfigurációs változás nem a várt módon történt.
    Tájékoztató A naplók tartalmazzák a konfigurációfrissítés során frissített konfigurációs beállítások kulcsait. A rendszer kihagyja a konfigurációs beállítások értékeit a naplóból, hogy elkerülje a bizalmas adatok kiszivárgását. Ezen a szinten figyelheti a naplókat, hogy az alkalmazás biztosan felvegye a várt konfigurációs módosításokat.
    Figyelmeztetés A naplók tartalmazzák a konfigurációfrissítés során előforduló hibákat és kivételeket. Az alkalmi előfordulások figyelmen kívül hagyhatók, mert a konfigurációszolgáltató továbbra is a gyorsítótárazott adatokat fogja használni, és legközelebb megkísérli frissíteni a konfigurációt. Ezen a szinten figyelheti a naplókat olyan ismétlődő figyelmeztetések esetén, amelyek potenciális problémákat jelezhetnek. Például elforgatta a kapcsolati sztring, de elfelejtette frissíteni az alkalmazást.

    A naplózást az esemény szintjén engedélyezheti a VerboseEventLevel.Verbose paraméter megadásával, az alábbi példában leírtak szerint. Ezek az utasítások az összes többi eseményszintre is érvényesek. Ez a példa csak a kategóriához engedélyezi a Microsoft-Extensions-Configuration-AzureAppConfiguration-Refresh naplókat.

    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);
    
  • A naplózási kategória az Microsoft-Extensions-Configuration-AzureAppConfiguration-Refreshegyes naplók előtt jelenik meg. Íme néhány példanapló minden eseményszinten:

    [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'
    

Feljegyzés

A naplózás akkor érhető el, ha a következő csomagok bármelyikét a 6.0.0-s vagy újabb verziót használja.

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

Az erőforrások eltávolítása

Ha nem szeretné folytatni a cikkben létrehozott erőforrások használatát, törölje az itt létrehozott erőforráscsoportot a díjak elkerülése érdekében.

Fontos

Az erőforráscsoport törlése nem vonható vissza. Az erőforráscsoport és a benne lévő összes erőforrás véglegesen törlődik. Győződjön meg arról, hogy nem véletlenül törli a rossz erőforráscsoportot vagy erőforrásokat. Ha a cikk erőforrásait olyan erőforráscsoporton belül hozta létre, amely más megtartani kívánt erőforrásokat tartalmaz, törölje az egyes erőforrásokat a megfelelő panelről az erőforráscsoport törlése helyett.

  1. Jelentkezzen be az Azure Portalra, és válassza ki az Erőforráscsoportokat.
  2. A Szűrés név szerint mezőbe írja be az erőforráscsoport nevét.
  3. Az eredménylistában válassza ki az erőforráscsoport nevét az áttekintés megtekintéséhez.
  4. Válassza az Erőforráscsoport törlése elemet.
  5. A rendszer az erőforráscsoport törlésének megerősítését kéri. Adja meg a megerősítéshez az erőforráscsoport nevét, és válassza a Törlés lehetőséget.

Néhány pillanat múlva az erőforráscsoport és annak összes erőforrása törlődik.

Következő lépések

Ebben az oktatóanyagban engedélyezte a .NET-alkalmazást, hogy dinamikusan frissítse a konfigurációs beállításokat az Alkalmazáskonfigurációból. Ha szeretné megtudni, hogyan használhat azure-beli felügyelt identitást az alkalmazáskonfigurációhoz való hozzáférés gördülékenyebbé tételéhez, folytassa a következő oktatóanyagban.