次の方法で共有


チュートリアル: .NET Framework アプリで動的な構成を使用する

App Configuration からのデータは、.NET Framework アプリでアプリ設定として読み込むことができます。 詳細については、クイックスタートをご覧ください。 ただし、.NET Framework の設計により、アプリ設定はアプリの再起動時にのみ更新できます。 App Configuration .NET プロバイダーは、.NET Standard ライブラリです。 アプリの再起動なしで、構成の動的なキャッシュと更新がサポートされます。 このチュートリアルでは、.NET Framework コンソール アプリに、動的構成の更新を実装する方法について説明します。

このチュートリアルでは、以下の内容を学習します。

  • App Configuration ストアへの変更に合わせて構成を更新するように .NET Framework アプリを設定する。
  • 最新の構成をアプリケーションに挿入する。

前提条件

キーと値を追加する

App Configuration ストアに次のキーと値を追加し、[ラベル][コンテンツのタイプ] を既定値のままにします。 Azure portal または CLI を使用してストアにキーと値を追加する方法の詳細については、キーと値の作成に関する記事を参照してください。

キー
TestApp:Settings:メッセージ Azure App Configuration からのデータ

.NET Framework コンソール アプリを作成する

  1. Visual Studio を開始し、 [新しいプロジェクトの作成] を選択します。

  2. [新しいプロジェクトの作成] で、 [コンソール] プロジェクトの種類でフィルターを掛け、プロジェクト テンプレート リストから [コンソール アプリ (.NET Framework)] と C# を選びます。 [次へ] を押します。

  3. [新しいプロジェクトの構成] で、プロジェクト名を入力します。 [フレームワーク] で、 .NET Framework 4.7.2 以上を選択します。 [作成] をクリックします。

App Configuration からデータを再度読み込む

  1. プロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。 [参照] タブで、次の NuGet パッケージの最新バージョンを検索し、プロジェクトに追加します。

    • Microsoft.Extensions.Configuration.AzureAppConfiguration
    • Azure.Identity の
  2. Program.cs を開き、次の名前空間を追加します。

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    using Azure.Identity;
    
  3. 構成に関連したオブジェクトを格納するために 2 つの変数を追加します。

    private static IConfiguration _configuration;
    private static IConfigurationRefresher _refresher;
    
  4. 指定した更新オプションを使用して App Configuration に接続するように Main メソッドを更新します。 Microsoft Entra ID (推奨) または接続文字列を使用して App Configuration に接続します。

    DefaultAzureCredential を使って、App Configuration ストアに対する認証を行います。 手順に従って、資格情報に App Configuration データ閲覧者ロールを割り当てます。 アプリケーションを実行する前に、アクセス許可が伝わるのに十分な時間をおいてください。

    // Existing code in Program.cs
    // ... ...
    
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
            options.Connect(new Uri(endpoint), new DefaultAzureCredential())
                   // Load all keys that start with `TestApp:` and have no label.
                   .Select("TestApp:*")
                   // Reload configuration if any selected key-values have changed.
                   .ConfigureRefresh(refresh =>
                   {
                       refresh.RegisterAll()
                              .SetRefreshInterval(TimeSpan.FromSeconds(10));
                   });
    
            _refresher = options.GetRefresher();
        });
    
        _configuration = builder.Build();
        PrintMessage().Wait();
    }
    
    // The rest of existing code in Program.cs
    // ... ...
    

    ConfigureRefresh メソッド内では、RegisterAll メソッドを呼び出して、選択したキー値 (TestApp で始まりラベルのない値) の変更が検出されるたびに、構成全体を再読み込みするように App Configuration プロバイダーに指示します。 構成の変更の監視の詳細については、「 構成の更新のベスト プラクティス」を参照してください。

    SetRefreshInterval メソッドでは、構成の変更を確認するために新しい要求が App Configuration に対して行われるまでに経過する必要がある最小時間を指定します。 この例では、既定の有効期限である 30 秒をオーバーライドし、デモンストレーションの目的で代わりに 10 秒を指定しています。

  5. App Configuration からの構成データの更新をトリガーする PrintMessage() というメソッドを追加します。

    private static async Task PrintMessage()
    {
        Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");
    
        // Wait for the user to press Enter
        Console.ReadLine();
    
        await _refresher.TryRefreshAsync();
        Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");
    }
    

    ConfigureRefresh メソッドを単独で呼び出しても、構成は自動的に更新されません。 インターフェイス TryRefreshAsync から IConfigurationRefresher メソッドを呼び出して、更新をトリガーします。 この設計は、アプリケーションがアイドル状態の場合でも App Configuration に要求が送信されるのを回避することを目的としています。 アプリケーションがアクティブであるとみなす場所に TryRefreshAsync 呼び出しを含めることができます。 たとえば、受信メッセージ、注文、複雑なタスクの反復を処理するときなどです。 また、アプリケーションが常にアクティブである場合は、タイマー内に含めることができます。 この例では、Enter キーを押すと TryRefreshAsync を呼び出します。 何らかの理由で呼び出し TryRefreshAsync が失敗した場合でも、アプリケーションではキャッシュされた構成が引き続き使用されます。 構成された更新間隔が経過し、 TryRefreshAsync 呼び出しがアプリケーション アクティビティによって再度トリガーされたときに、もう 1 回試行されます。 TryRefreshAsyncの呼び出しは、構成された更新間隔が経過する前の no-op であるため、頻繁に呼び出される場合でも、パフォーマンスへの影響は最小限です。

アプリをビルドしてローカルで実行する

  1. 環境変数を設定します。

    Endpointという名前の環境変数を、Azure portal のストアの概要にある App Configuration ストアのエンドポイントに設定します。

    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>'
    
  2. 変更を有効にするために、Visual Studio を再起動します。

  3. Ctrl + F5 キーを押して、アプリをビルドし、実行します。

    ローカルでのアプリの起動

  4. Azure portal で、App Configuration ストアの [構成エクスプローラー] に移動し、次のキーの値を更新します。

    キー
    TestApp:Settings:メッセージ Azure App Configuration からのデータ - 更新済み
  5. 実行中のアプリケーションに戻り、Enter キーを押して更新をトリガーし、コマンド プロンプト ウィンドウまたは PowerShell ウィンドウに更新された値を表示します。

    ローカルでのアプリの更新

    更新操作の構成を指定するときに、 SetRefreshInterval メソッドを使用して更新間隔を 10 秒に設定したので、構成設定の値は、その設定の最後の更新から少なくとも 10 秒が経過した場合にのみ更新されます。

リソースをクリーンアップする

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次の手順

このチュートリアルでは、App Configuration から動的に構成設定を更新できるように .NET Framework アプリを設定しました。 ASP.NET Web アプリケーション (.NET Framework) で動的構成を有効にする方法については、次のチュートリアルに進んでください。

App Configuration へのアクセスを効率化する Azure マネージド ID を使用する方法については、次のチュートリアルに進んでください。