教學課程:在 .NET 背景服務中使用動態設定
來自 應用程式組態 的數據可以載入為 .NET 應用程式中的應用程式設定。 如需詳細資訊,請參閱快速入門。 不過,如同 .NET 所設計,應用程式設定只能在應用程式重新啟動時重新整理。 應用程式組態 .NET 提供者為 .NET Standard 程式庫。 其支援動態快取和重新整理設定,而不需重新開機應用程式。 本教學課程說明如何在 .NET 背景服務中實作動態組態更新。
在本教學課程中,您會了解如何:
- 設定 .NET 背景服務以更新其設定,以回應 應用程式組態 存放區中的變更。
- 在您的背景服務中取用最新的組態。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立一個。
- 應用程式組態存放區。 建立存放區。
- .NET SDK 6.0 或更新版本 - 也可以在 Azure Cloud Shell 中使用。
新增索引鍵/值
將下列索引鍵/值新增至應用程式組態存放區,並保留標籤和內容類型的預設值。 如需如何使用 Azure 入口網站或 CLI 將索引鍵/值新增至存放區的詳細資訊,請移至建立索引鍵/值。
機碼 | 值 |
---|---|
TestApp:Settings:Message | Azure 應用程式組態的值 |
建立 .NET 背景服務
您可以使用 .NET 命令列介面 (CLI) 來建立新的 .NET 應用程式專案。 使用 .NET CLI 而非 Visual Studio 的好處,在於 .NET CLI 可同時於 Windows、macOS 及 Linux 平台上取得。 或者,使用 Azure Cloud Shell 中提供的預先安裝工具。
為您的專案建立新資料夾。
在新的資料夾中,執行下列命令來建立新的 .NET 背景服務專案:
dotnet new worker
從應用程式設定重新載入資料
透過執行下列命令,將參考新增至
Microsoft.Extensions.Configuration.AzureAppConfiguration
NuGet 套件:dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
執行下列命令以還原您專案的套件:
dotnet restore
開啟 Program.cs,並新增下列陳述式:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
使用 Microsoft Entra ID 連線到 應用程式組態(建議),或 連接字串。
您可以使用
DefaultAzureCredential
來向 應用程式組態 存放區進行驗證。 請遵循指示,將認證指派給 應用程式組態 數據讀取者角色。 在執行應用程式之前,請務必允許足夠的時間來傳播許可權。// 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 // ... ...
在
ConfigureRefresh
方法中,註冊您應用程式組態存放區內的索引鍵以變更監視。Register
方法具有選用布林值參數refreshAll
,如果已註冊金鑰變更,可以用於表示是否應該重新整理所有設定值。 在此範例中,只會重新整理金鑰 TestApp:Settings:Message。 註冊進行重新整理的所有設定都有 30 秒的預設快取到期時間,之後才會嘗試進行新的重新整理。 您可以呼叫AzureAppConfigurationRefreshOptions.SetCacheExpiration
方法來更新。開啟 Worker.cs。 將和
IConfigurationRefresher
插入IConfiguration
至服務,Worker
並從 應用程式組態 記錄組態數據。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); } } }
單獨呼叫
ConfigureRefresh
方法並不會導致設定自動重新整理。 您可以從介面IConfigurationRefresher
呼叫TryRefreshAsync
方法來觸發重新整理。 即使應用程式閑置,此設計仍可避免傳送至 應用程式組態 的要求。 您可以將TryRefreshAsync
呼叫包含在您認為使用中的應用程式。 例如,當您在處理內送郵件、訂單或複雜工作的反覆項目時,就可以使用此呼叫。 如果您的應用程式隨時都在作用中,此呼叫也可作為計時器使用。 在這裡範例中,您會在每次執行背景服務時呼叫TryRefreshAsync
。 請注意,即使呼叫TryRefreshAsync
因為任何原因而造成失敗,您的應用程式仍會繼續使用快取設定。 當過了設定快取的到期時間之後,而且應用程式活動再次觸發TryRefreshAsync
呼叫,將會再進行另一次嘗試。 在設定的快取到期時間過去之前,呼叫TryRefreshAsync
是不可操作的,因此即使頻繁呼叫,其對效能的影響也是最小的。
於本機建置並執行應用程式
設定環境變數。
將名為 Endpoint 的環境變數設定為您在 Azure 入口網站 中存放區概觀底下找到 應用程式組態 存放區的端點。
如果您使用 Windows 命令提示字元,請執行下列命令,然後重新啟動命令提示字元以讓變更生效:
setx Endpoint "<endpoint-of-your-app-configuration-store>"
如果您使用 PowerShell,請執行下列命令:
$Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
如果您使用 macOS 或 Linux,請執行下列命令:
export Endpoint='<endpoint-of-your-app-configuration-store>'
執行下列命令以建置應用程式。
dotnet build
建置成功完成之後,請執行下列命令,在本機執行應用程式。
dotnet run
您應該會在主控台中看到下列輸出。
在 Azure 入口網站中,瀏覽至您應用程式組態存放區的 [組態總管],並更新下列金鑰的值。
機碼 值 TestApp:Settings:Message Azure 應用程式組態的資料 - 已更新 請稍候片刻,讓重新整理間隔時間範圍過去。 您會看到主控台輸出已變更。
清除資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
重要
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選取 [刪除資源群組]。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。
下一步
在本教學課程中,您已啟用 .NET 背景服務,以動態方式從 應用程式組態 重新整理組態設定。 若要瞭解如何在 ASP.NET Web 應用程式中啟用動態設定,請繼續進行下一個教學課程:
如需了解如何使用 Azure 受控識別簡化存取應用程式組態,請繼續進行下一個教學課程: