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 TryRefreshAsync
IConfigurationRefresher
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.
Regisztrálja a szükséges alkalmazáskonfigurációs szolgáltatásokat a saját parancsára
IServiceCollection
való 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();
Frissítse a konfigurációt a szolgáltatásgyűjtemény egy példányának
IConfigurationRefresherProvider
feloldásával ésTryRefreshAsync
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
Á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'
Futtassa a következő parancsot a konzolalkalmazás létrehozásához:
dotnet build
A build sikeres befejezése után futtassa a következő parancsot az alkalmazás helyi futtatásához:
dotnet run
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.
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 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.
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
Verbose
EventLevel.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 aMicrosoft-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-Refresh
egyes 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.
- Jelentkezzen be az Azure Portalra, és válassza ki az Erőforráscsoportokat.
- A Szűrés név szerint mezőbe írja be az erőforráscsoport nevét.
- Az eredménylistában válassza ki az erőforráscsoport nevét az áttekintés megtekintéséhez.
- Válassza az Erőforráscsoport törlése elemet.
- 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.