البرنامج التعليمي: استخدام التكوين الديناميكي في تطبيق ويب ASP.NET (.NET Framework)

يمكن تحميل البيانات من App Configuration كإعدادات تطبيق في تطبيق .NET Framework. لمزيد من المعلومات، راجع البداية السريعة. ومع ذلك، كما هو مصمم بواسطة .NET Framework، يمكن تحديث إعدادات التطبيق فقط عند إعادة تشغيل التطبيق. إن موفر App Configuration .NET عبارة عن مكتبة قياسية.NET. يدعم التخزين المؤقت وتحديث التكوين بشكل ديناميكي دون إعادة تشغيل التطبيق. يوضح هذا البرنامج التعليمي كيف يمكنك تنفيذ تحديثات التكوين الديناميكية في تطبيق ASP.NET Web Forms. وتنطبق نفس التقنية على تطبيقات .NET Framework MVC.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • قم بإعداد تطبيق ويب ASP.NET لتحديث تكوينه استجابة للتغييرات في مخزن App Configuration.
  • أدخل آخر تكوين في الطلبات على التطبيق الخاص بك.

المتطلبات الأساسية

إضافة قيم المفاتيح

أضف قيم المفاتيح التالية إلى متجر App Configuration واترك Label و Content Type بقيمهما الافتراضية. لمزيد من المعلومات حول كيفية إضافة قيم المفاتيح إلى مخزن باستخدام مدخل Microsoft Azure أو CLI، انتقل إلى إنشاء قيمة مفتاح.

مفتاح القيمة
TestApp:الإعدادات:BackgroundColor أبيض
TestApp:الإعدادات:FontColor أسود
TestApp:Settings:FontSize 40
TestApp:الإعدادات:Message البيانات من Azure App Configuration
TestApp:الإعدادات:Sentinel v1

إنشاء ASP.NET Web Application

  1. افتح Visual Studio، وحدد Create a new project.

  2. حدد ASP.NET Web Application (.NET Framework) مع C# من قائمة قالب المشروع واضغط على Next.

  3. في تكوين المشروع الجديد،أدخل اسم المشروع. ضمن Framework، حدد .NET Framework 4.7.2 أو أعلى. اضغط على إنشاء.

  4. في Create a new ASP.NET Web Application، حدد Web Forms. اضغط على إنشاء.

إعادة تحميل البيانات من App Configuration

  1. حدد بزر الماوس الأيمن على المشروع، وحدد Manage NuGet Packages. في علامة التبويب Browse، ابحث عن أحدث إصدار من حزمة NuGet التالية وقم بإضافته إلى المشروع الخاص بك.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. افتح ملف Global.asax.cs وقم بإضافة مساحات الاسم التالية.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. إضافة متغيرات الأعضاء الثابتة التالية إلى Global class.

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. إضافة Application_Start method to the Global للفئة. إذا كان الأسلوب موجوداً بالفعل، فقم بإضافة التعليمات البرمجية التالية إليه.

    protected void Application_Start(object sender, EventArgs e)
    {
        ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    // Load all keys that start with `TestApp:` and have no label.
                    .Select("TestApp:*")
                    // Configure to reload configuration if the registered key 'TestApp:Settings:Sentinel' is modified.
                    .ConfigureRefresh(refresh => 
                    {
                        refresh.Register("TestApp:Settings:Sentinel", refreshAll:true)
                               .SetCacheExpiration(new TimeSpan(0, 5, 0));
                    });
            _configurationRefresher = options.GetRefresher();
        });
    
        Configuration = builder.Build();
    }
    

    Application_Startيتم استدعاء الأسلوب عند الطلب الأول لتطبيق الويب الخاص بك. يتم استدعاؤه مرة واحدة فقط خلال دورة حياة التطبيق. على هذا النحو هو مكان جيد لتهيئة الكائن الخاص بك IConfiguration وتحميل البيانات من App Configuration.

    في الأسلوب ConfigureRefresh، يُسجَّل مفتاح داخل متجر إعدادات التطبيق لمراقبة التغييرات. refreshAllتشير معلمةRegister الأسلوب إلى أنه يجب تحديث كافة قيم التكوين إذا تغير المفتاح المسجل. في هذا المثال، المفتاح TestAppTestApp:Settings:Sentinel هو مفتاح sentinel الذي تقوم بتحديثه بعد إكمال تغيير جميع المفاتيح الأخرى. عند الكشف عن تغيير، يقوم التطبيق الخاص بك بتحديث كافة قيم التكوين. يساعد هذا الأسلوب على ضمان تناسق التكوين في التطبيق الخاص بك مقارنة بمراقبة جميع مفاتيح التغييرات.

    SetCacheExpirationيحدد الأسلوب الحد الأدنى من الوقت الذي يجب أن ينقضي قبل إجراء طلب جديد إلى App Configuration للتحقق من أي تغييرات في التكوين. في هذا المثال، تقوم بتجاوز وقت انتهاء الصلاحية الافتراضي وقدره 30 ثانية، محدداً زمن قدره 5 دقائق بدلاً من ذلك. يؤدي هذا إلى تقليل العدد المحتمل للطلبات التي تم إجراؤها على متجر App Configuration.

  5. إضافة Application_BeginRequest method to the Global للفئة. إذا كان الأسلوب موجوداً بالفعل، فقم بإضافة التعليمات البرمجية التالية إليه.

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

    استدعاء ConfigureRefresh الأسلوب وحده لن يؤدي إلى تحديث التكوين تلقائياً. استدعاء TryRefreshAsync الأسلوب في بداية كل طلب للإشارة لتحديث. يضمن هذا التصميم أن التطبيق الخاص بك يرسل الطلبات إلىApp Configuration فقط عندما يتلقى الطلبات بنشاط.

    يعتبر الاتصال TryRefreshAsync غير موجود قبل انقضاء وقت انتهاء صلاحية ذاكرة التخزين المؤقت المكونة، لذا فإن تأثير الأداء الخاص به هو الحد الأدنى. عند تقديم طلب لـ App Configuration، ونظراً لعدم انتظارك للمهمة، يتم تحديث التكوين بشكل غير متزامن دون حظر تنفيذ الطلب الحالي. قد لا يحصل الطلب الحالي على قيم التكوين المحدثة، ولكن الطلبات اللاحقة ستتحقق.

    إذا فشل الاستدعاء TryRefreshAsync لأي سبب، فسيواصل التطبيق استخدام التكوين المخزن مؤقتا. سيتم إجراء محاولة أخرى عند مرور وقت انتهاء صلاحية ذاكرة التخزين المؤقت المكونة مرة أخرى، ويتم الاستدعاء TryRefreshAsync بواسطة طلب جديد إلى التطبيق الخاص بك.

استخدام أحدث بيانات التكوين

  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. قم بتعيين متغير بيئة باسم ConnectionString إلى سلسلة اتصال المفتاح للقراءة فقط التي تم الحصول عليها أثناء إنشاء مخزن App Configuration.

    إذا كنت تستخدم مطالبة أوامر Windows، فقم بتشغيل الأمر التالي:

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

    إذا كنت تستخدم Windows PowerShell، فقم بإجراء الأمر التالي:

    $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    
  2. أعد تشغيل Visual Studio للسماح بتغييرات حيز التنفيذ.

  3. اضغط على Ctrl + F5 لبناء تطبيق الويب وتشغيله.

    App launch local

  4. في مدخل Microsoft Azure، انتقل إلى Configuration explorer الخاص بالمتجر الخاص بـ App Configuration، ثم قم بتحديث قيمة المفاتيح التالية. تذكر تحديث مفتاح sentinel TestApp:Settings:Sentinel أخيراً.

    مفتاح القيمة
    TestApp:الإعدادات:BackgroundColor Green
    TestApp:الإعدادات:FontColor LightGray
    TestApp:الإعدادات:Message البيانات من Azure App Configuration - الآن مع التحديثات المباشرة!
    TestApp:الإعدادات:Sentinel الإصدار 2
  5. قم بتحديث صفحة المتصفح لرؤية إعدادات التكوين الجديدة. قد تحتاج إلى التحديث أكثر من مرة لعكس التغييرات أو تغيير وقت انتهاء صلاحية ذاكرة التخزين المؤقت إلى أقل من 5 دقائق.

    App refresh local

إشعار

يمكن تنزيل مثال التعليمة البرمجية المستخدمة في هذا البرنامج التعليمي من ⁧⁩مستودع ⁧Azure App Configuration GitHub⁩.

تنظيف الموارد

إذا كنت لا تريد مواصلة استخدام الموارد التي تم إنشاؤها في هذه المقالة، يوصى بحذف مجموعة الموارد التي أنشأتها هنا لتجنب الرسوم.

هام

حذف مجموعة الموارد لا يمكن التراجع عنه. يتم حذف مجموعة الموارد وجميع الموارد المضمنة فيها نهائيًا. تأكد من عدم حذفك للموارد أو مجموعة المورد الخاطئة عن غير قصد. في حالة إنشاء الموارد لهذه المقالة داخل مجموعة موارد تشتمل على موارد أخرى تريد الاحتفاظ بها، احذف كل مورد على حدة من الجزء الخاص به بدلًا من حذف مجموعة الموارد.

  1. سجل الدخول إلى مدخل Microsoft Azure، وحدد Resource groups.
  2. في المربع تصفية حسب الاسم ، أدخل اسم مجموعة الموارد الخاصة بك.
  3. في قائمة النتائج، حدد اسم مجموعة الموارد لاستعراض نظرة عامة.
  4. حدد Delete resource group.
  5. يُطلب منك تأكيد حذف مجموعة الموارد. أدخل اسم مجموعة الموارد للتأكيد وحدد "Delete".

بعد بضع لحظات، يتم حذف مجموعة الموارد وكافة مواردها.

الخطوات التالية

في هذا البرنامج التعليمي، قمت بتمكين تطبيق ASP.NET Web Forms من تحديث إعدادات التكوين بشكل ديناميكي من App Configuration. لمعرفة كيفية تمكين التكوين الديناميكي في تطبيق .NET Framework، تابع البرنامج التعليمي التالي:

لمعرفة كيفية استخدام هوية Azure المدارة لتبسيط الوصول إلى تكوين التطبيق، تابع البرنامج التعليمي التالي: