次の方法で共有


チュートリアル: ASP.NET Web アプリケーションで動的構成を使用する (.NET Framework)

App Configuration のデータは、.NET Framework アプリケーションのアプリ設定として読み込むことができます。 詳細については、クイックスタートをご覧ください。 ただし、.NET Framework によって設計されているように、アプリ設定はアプリケーションの再起動時にのみ更新できます。 App Configuration .NET プロバイダーは、.NET Standard ライブラリです。 アプリケーションの再起動なしで、構成の動的なキャッシュと更新がサポートされます。 このチュートリアルでは、ASP.NET Web フォーム アプリケーションで動的構成の更新を実装する方法について説明します。 .NET Framework MVC アプリケーションにも同じ手法が適用されます。

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

  • App Configuration ストアの変更に応じて、ASP.NET Web アプリケーションの構成を更新するように設定します。
  • アプリケーションへの要求に最新の構成を挿入します。

前提条件

キーバリューを追加する

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

価値
TestApp:Settings:BackgroundColor (英語) ホワイト
TestApp:Settings:FontColor (フォントカラー) ブラック
TestApp:Settings:FontSize (英語) 40
TestApp:Settings:メッセージ Azure App Configuration からのデータ

ASP.NET Web アプリケーションを作成する

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

  2. プロジェクト テンプレートの一覧から C# ASP.NET Web アプリケーション (.NET Framework) を選択し、[ 次へ] をクリックします。

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

  4. [ 新しい ASP.NET Web アプリケーションの作成] で、[ Web フォーム] を選択します。 [作成] をクリックします。

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

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

    • Microsoft.Extensions.Configuration.AzureAppConfiguration
    • Azure.Identity の
  2. ファイルGlobal.asax.cs開き、次の名前空間を追加します。

    using Azure.Identity;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. 次の静的メンバー変数を Global クラスに追加します。

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. Application_Start クラスにGlobal メソッドを追加します。 メソッドが既に存在する場合は、次のコードを追加します。

    protected void Application_Start(object sender, EventArgs e)
    {
        ConfigurationBuilder 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(new TimeSpan(0, 5, 0));
                   });
            _configurationRefresher = options.GetRefresher();
        });
    
        Configuration = builder.Build();
    }
    

    Application_Start メソッドは、Web アプリケーションへの最初の要求時に呼び出されます。 これは、アプリケーションのライフ サイクル中に 1 回だけ呼び出されます。 そのため、 IConfiguration オブジェクトを初期化し、App Configuration からデータを読み込むのに適しています。

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

    SetRefreshInterval メソッドでは、構成の変更を確認するために新しい要求が App Configuration に対して行われるまでに経過する必要がある最小時間を指定します。 この例では、既定の有効期限 30 秒をオーバーライドし、代わりに 5 分の時間を指定します。 これにより、App Configuration ストアに対して行われる可能性のある要求の数が減ります。

  5. Application_BeginRequest クラスにGlobal メソッドを追加します。 メソッドが既に存在する場合は、次のコードを追加します。

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

    ConfigureRefresh メソッドを単独で呼び出しても、構成は自動的に更新されません。 更新を通知するには、すべての要求の先頭で TryRefreshAsync メソッドを呼び出します。 この設計により、アプリケーションが要求をアクティブに受信している場合にのみ App Configuration に要求が送信されるようになります。

    TryRefreshAsyncの呼び出しは、構成された更新間隔が経過する前の no-op であるため、パフォーマンスへの影響は最小限です。 タスクを待機しないため、App Configuration に対して要求が行われると、現在の要求の実行をブロックすることなく、構成が非同期的に更新されます。 現在の要求は更新された構成値を取得できない場合がありますが、後続の要求では取得されます。

    何らかの理由で呼び出し TryRefreshAsync が失敗した場合、アプリケーションはキャッシュされた構成を引き続き使用します。 構成された更新間隔が再び渡され、アプリケーションへの新しい要求によって TryRefreshAsync 呼び出しがトリガーされたときに、もう 1 つの試行が行われます。

最新の構成データを使用する

  1. Default.aspxを開き、その内容を次のマークアップに置き換えます。 Inherits 属性が、アプリケーションの名前空間とクラス名と一致していることを確認します。

    <%@ 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. Default.aspx.csを開き、次のコードで更新します。

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

アプリケーションの構築と実行

  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 キーを押して、Web アプリケーションをビルドして実行します。

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

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

    価値
    TestApp:Settings:BackgroundColor (英語) 緑色
    TestApp:Settings:FontColor (フォントカラー) ライトグレー
    TestApp:Settings:メッセージ Azure App Configuration からのデータ - ライブ更新が追加されました。
  5. ブラウザー ページを最新の情報に更新して新しい構成設定を確認します。 変更を反映したり、更新間隔を 5 分未満に変更したりするには、複数回の更新が必要になる場合があります。

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

このチュートリアルで使用するコード例は、 Azure App Configuration GitHub リポジトリからダウンロードできます。

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

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

重要

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

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

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

次のステップ

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

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