بدء استخدام مكتبة Azure CDN لـ ‎.NET

هام

سيتم إيقاف Azure CDN Standard من Microsoft (الكلاسيكي) في 30 سبتمبر 2027. لتجنب أي تعطيل للخدمة، من المهم ترحيل Azure CDN Standard من ملفات تعريف Microsoft (الكلاسيكية) إلى Azure Front Door Standard أو المستوى المتميز بحلول 30 سبتمبر 2027. لمزيد من المعلومات، راجع Azure CDN Standard من إيقاف Microsoft (الكلاسيكي).

يمكنك استخدام Azure CDN Library for .NET لأتمتة إنشاء وإدارة ملفات تعريف CDN ونقاط النهاية. يستعرض هذا البرنامج التعليمي عملية إنشاء تطبيق وحدة تحكم ‎.NET بسيط يوضح العديد من العمليات المتاحة. لا يهدف هذا البرنامج التعليمي إلى وصف جميع جوانب مكتبة Azure CDN ل .NET بالتفصيل.

تحتاج إلى Visual Studio 2015 لإكمال هذا البرنامج التعليمي. يتوفر Visual Studio Community 2015 مجانًا للتنزيل.

تلميح

يتوفر المشروع المكتمل من هذا البرنامج التعليمي للتنزيل على MSDN.

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

قبل كتابة رمز إدارة CDN، يجب عليك القيام ببعض التحضير لتمكين الرمز من التفاعل مع Azure Resource Manager. للقيام بهذا الإعداد، تحتاج إلى:

  • قم بإنشاء مجموعة موارد لتحتوي على ملف تعريف CDN الذي تم إنشاؤه في هذا البرنامج التعليمي
  • تكوين معرف Microsoft Entra لتوفير المصادقة للتطبيق
  • تطبيق الأذونات على مجموعة الموارد بحيث يمكن للمستخدمين المعتمدين فقط من مستأجر Microsoft Entra التفاعل مع ملف تعريف CDN

إنشاء مجموعة الموارد

  1. تسجيل الدخول إلى مدخل Azure.

  2. انقر فوق إنشاء مورد.

  3. ابحث عن مجموعة الموارد وفي جزء مجموعة الموارد، انقر فوق إنشاء.

    إنشاء مجموعة الموارد الجديدة

  4. قم بتسمية مجموعة الموارد CdnConsoleTutorial. حدد اشتراكك واختر موقعًا قريبًا منك. إذا كنت ترغب في ذلك، يمكنك النقر فوق خانة الاختيار تثبيت بلوحة المعلومات لتثبيت مجموعة الموارد بلوحة المعلومات في المدخل. إن التثبيت يسهل العثور عليه لاحقًا. بعد إجراء التحديدات، انقر فوق إنشاء.

    لقطة شاشة لمربع الحوار مجموعة الموارد.

  5. بعد إنشاء مجموعة الموارد، إذا لم تقم بتثبيتها في لوحة المعلومات، يمكنك العثور عليها بالنقر فوق استعراض، ثم مجموعات الموارد. لفتحها، انقر فوق مجموعة الموارد. دوّن معرف الاشتراك الخاص بك. سنحتاجها لاحقًا.

    لقطة شاشة لقسم البرنامج التعليمي لوحدة التحكم C D N.

إنشاء تطبيق Microsoft Entra وتطبيق الأذونات

هناك نهجان لمصادقة التطبيق باستخدام معرف Microsoft Entra: المستخدمون الفرديون أو كيان الخدمة. يشبه كيان الخدمة حساب مستخدم في Windows. بدلاً من منح أذونات مستخدم معينة للتفاعل مع ملفات تعريف CDN، يتم منح الأذونات بدلاً من ذلك إلى مدير الخدمة. تُستخدم مبادئ الخدمة عادةً للعمليات الآلية غير التفاعلية. على الرغم من أن هذا البرنامج التعليمي يكتب تطبيق وحدة تحكم تفاعلي، فسوف نركز على نهج الخدمة الأساسي.

يتكون إنشاء كيان خدمة من عدة خطوات، بما في ذلك إنشاء تطبيق Microsoft Entra. لإنشائه، سنتبع هذا البرنامج التعليمي.

هام

تأكد من اتباع جميع الخطوات في البرنامج التعليمي المرتبط. من المهم أن تكمله تمامًا كما هو موضح. تأكد من ملاحظة معرف المستأجر واسم مجال المستأجر عادة مجال .onmicrosoft.com ما لم تحدد مجالاً مخصصًا ومعرف العميل ومفتاح مصادقة العميل، حيث نحتاج إلى هذه المعلومات لاحقًا. كن حذرًا لحماية معرف العميل ومفتاح مصادقة العميل، حيث يمكن لأي شخص استخدام بيانات الاعتماد هذه لتنفيذ العمليات ككيان الخدمة.

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

عند الوصول إلى خطوة تعيين التطبيق إلى دور، استخدم مجموعة الموارد التي تم إنشاؤها سابقًا، CdnConsoleTutorial، ولكن بدلاً من دور القارئ، قم بتعيين دور مساهم ملف تعريف CDN. بعد تعيين التطبيق دور مساهم ملف تعريف CDN على مجموعة الموارد الخاصة بك، ارجع إلى هذا البرنامج التعليمي.

بمجرد إنشاء كيان الخدمة وتعيين دور مساهم ملف تعريف CDN، يجب أن تبدو جزء المستخدمين لمجموعة الموارد مشابهة للصورة التالية.

جزء المستخدمين

مصادقة المستخدم التفاعلية

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

هام

اتبع هذه الخطوات التالية فقط إذا كنت تختار استخدام مصادقة المستخدم الفردي بدلاً من كيان الخدمة.

  1. عند إنشاء التطبيق الخاص بك، بدلاً من تطبيق ويب، اختر تطبيق أصلي.

    التطبيق الأصلي

  2. في الصفحة التالية، تتم مطالبتك بإعادة توجيه URI. لن يتم التحقق من صحة URI، ولكن تذكر ما أدخلته. ستحتاجها لاحقًا.

  3. ليست هناك حاجة لإنشاء مفتاح مصادقة العميل.

  4. بدلاً من تعيين كيان خدمة لدور مساهم ملف تعريف CDN، سنقوم بتعيين مستخدمين أو مجموعات فردية. في هذا المثال، يمكنك أن ترى أنني قمت بتعيين CDN Demo User إلى دور مساهم ملف تعريف CDN.

    الوصول إلى المستخدم الفردي

إنشاء مشروعك وإضافة حزم NuGet

الآن بعد أن أنشأنا مجموعة موارد لملفات تعريف CDN الخاصة بنا ومنحنا إذن تطبيق Microsoft Entra لإدارة ملفات تعريف CDN ونقاط النهاية داخل تلك المجموعة، يمكننا البدء في إنشاء تطبيقنا.

هام

تم إهمال حزمة Microsoft.IdentityModel.Clients.ActiveDirectory NuGet ومكتبة مصادقة Microsoft Azure Active Directory (ADAL). لم تتم إضافة أي ميزات جديدة منذ 30 يونيو 2020. نشجعك بشدة على الترقية. لمزيد من المعلومات، راجع دليل الترحيل.

من داخل Visual Studio 2015، حدد ملف، جديد، مشروع... لفتح مربع حوار المشروع الجديد. قم بتوسيع ‎‎Visual C#‎‎، ثم حدد Windows في الجزء الموجود على اليسار. حدد تطبيق وحدة التحكم في الجزء الأوسط. قم بتسمية مشروعك، ثم حدد موافق.

مشروع جديد

سيستخدم مشروعنا بعض مكتبات Azure المضمنة في حزم NuGet. دعونا نضيف هذه المكتبات إلى المشروع.

  1. حدد قائمة Tools، Nuget مدير الحِزَم، ثم مدير الحِزَم Console.

    إدارة حزم Nuget

  2. في وحدة تحكم مدير الحزم، قم بتنفيذ الأمر التالي لتثبيت مكتبة مصادقة Active Directory (ADAL):

    Install-Package Microsoft.Identity.Client

  3. نفذ ما يلي لتثبيت مكتبة إدارة Azure CDN:

    Install-Package Microsoft.Azure.Management.Cdn

التوجيهات والثوابت والأسلوب الرئيسي وأساليب المساعد

دعونا نحصل على البنية الأساسية لبرنامجنا مكتوبة.

  1. مرة أخرى في علامة التبويب Program.cs، استبدل using التوجيهات الموجودة في الأعلى بالأمر التالي:

    using System;
    using System.Collections.Generic;
    using Microsoft.Azure.Management.Cdn;
    using Microsoft.Azure.Management.Cdn.Models;
    using Microsoft.Azure.Management.Resources;
    using Microsoft.Azure.Management.Resources.Models;
    using Microsoft.Identity.Client;
    using Microsoft.Rest;
    
  2. نحن بحاجة إلى تحديد بعض الثوابت التي تستخدمها أساليبنا. في Program الفئة ، ولكن قبل Main الأسلوب ، أضف كتل التعليمات البرمجية التالية. تأكد من استبدال العناصر النائبة، بما في ذلك <أقواس الزاوية>، بالقيم الخاصة بك حسب الحاجة.

    //Tenant app constants
    private const string clientID = "<YOUR CLIENT ID>";
    private const string clientSecret = "<YOUR CLIENT AUTHENTICATION KEY>"; //Only for service principals
    private const string authority = "https://login.microsoftonline.com/<YOUR TENANT ID>/<YOUR TENANT DOMAIN NAME>";
    
    //Application constants
    private const string subscriptionId = "<YOUR SUBSCRIPTION ID>";
    private const string profileName = "CdnConsoleApp";
    private const string endpointName = "<A UNIQUE NAME FOR YOUR CDN ENDPOINT>";
    private const string resourceGroupName = "CdnConsoleTutorial";
    private const string resourceLocation = "<YOUR PREFERRED AZURE LOCATION, SUCH AS Central US>";
    
  3. كذلك على مستوى الفئة، حدد هذين المتغيرين. نستخدم هذه المتغيرات لاحقا لتحديد ما إذا كان ملف التعريف ونقطة النهاية موجودين بالفعل.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. استبدال الأسلوب Main كما يلي:

    static void Main(string[] args)
    {
        //Get a token
        AuthenticationResult authResult = GetAccessToken();
    
        // Create CDN client
        CdnManagementClient cdn = new CdnManagementClient(new TokenCredentials(authResult.AccessToken))
            { SubscriptionId = subscriptionId };
    
        ListProfilesAndEndpoints(cdn);
    
        // Create CDN Profile
        CreateCdnProfile(cdn);
    
        // Create CDN Endpoint
        CreateCdnEndpoint(cdn);
    
        Console.WriteLine();
    
        // Purge CDN Endpoint
        PromptPurgeCdnEndpoint(cdn);
    
        // Delete CDN Endpoint
        PromptDeleteCdnEndpoint(cdn);
    
        // Delete CDN Profile
        PromptDeleteCdnProfile(cdn);
    
        Console.WriteLine("Press Enter to end program.");
        Console.ReadLine();
    }
    
  5. ستقوم بعض أساليبنا الأخرى بمطالبة المستخدم بأسئلة "نعم/لا". أضف الأسلوب التالي لتسهيل ذلك قليلاً:

    private static bool PromptUser(string Question)
    {
        Console.Write(Question + " (Y/N): ");
        var response = Console.ReadKey();
        Console.WriteLine();
        if (response.Key == ConsoleKey.Y)
        {
            return true;
        }
        else if (response.Key == ConsoleKey.N)
        {
            return false;
        }
        else
        {
            // They pressed something other than Y or N.  Let's ask them again.
            return PromptUser(Question);
        }
    }
    

الآن بعد أن تمت كتابة البنية الأساسية لبرنامجنا، يجب علينا إنشاء الأساليب التي تسمى بواسطة الأسلوب Main.

المصادقة

قبل أن نتمكن من استخدام مكتبة إدارة Azure CDN، نحتاج إلى مصادقة كيان الخدمة والحصول على رمز مميز للمصادقة. يستخدم هذا الأسلوب مكتبة مصادقة Active Directory لاسترداد الرمز المميز.

private static AuthenticationResult GetAccessToken()
{
    AuthenticationContext authContext = new AuthenticationContext(authority);
    ClientCredential credential = new ClientCredential(clientID, clientSecret);
    AuthenticationResult authResult =
        authContext.AcquireTokenAsync("https://management.core.windows.net/", credential).Result;

    return authResult;
}

إذا كنت تستخدم مصادقة مستخدم فردية GetAccessToken ، فإن الأسلوب يبدو مختلفا قليلا.

هام

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

private static AuthenticationResult GetAccessToken()
{
    AuthenticationContext authContext = new AuthenticationContext(authority);
    AuthenticationResult authResult = authContext.AcquireTokenAsync("https://management.core.windows.net/",
        clientID, new Uri("http://<redirect URI>"), new PlatformParameters(PromptBehavior.RefreshSession)).Result;

    return authResult;
}

تأكد من استبدال <redirect URI> ب URI إعادة التوجيه الذي أدخلته عند تسجيل التطبيق في معرف Microsoft Entra.

سرد ملفات تعريف CDN ونقاط النهاية

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

private static void ListProfilesAndEndpoints(CdnManagementClient cdn)
{
    // List all the CDN profiles in this resource group
    var profileList = cdn.Profiles.ListByResourceGroup(resourceGroupName);
    foreach (Profile p in profileList)
    {
        Console.WriteLine("CDN profile {0}", p.Name);
        if (p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase))
        {
            // Hey, that's the name of the CDN profile we want to create!
            profileAlreadyExists = true;
        }

        //List all the CDN endpoints on this CDN profile
        Console.WriteLine("Endpoints:");
        var endpointList = cdn.Endpoints.ListByProfile(p.Name, resourceGroupName);
        foreach (Endpoint e in endpointList)
        {
            Console.WriteLine("-{0} ({1})", e.Name, e.HostName);
            if (e.Name.Equals(endpointName, StringComparison.OrdinalIgnoreCase))
            {
                // The unique endpoint name already exists.
                endpointAlreadyExists = true;
            }
        }
        Console.WriteLine();
    }
}

إنشاء ملفات تعريف CDN ونقاط النهاية

بعد ذلك، نقوم بإنشاء ملف تعريف.

private static void CreateCdnProfile(CdnManagementClient cdn)
{
    if (profileAlreadyExists)
    {
        Console.WriteLine("Profile {0} already exists.", profileName);
    }
    else
    {
        Console.WriteLine("Creating profile {0}.", profileName);
        ProfileCreateParameters profileParms =
            new ProfileCreateParameters() { Location = resourceLocation, Sku = new Sku(SkuName.StandardVerizon) };
        cdn.Profiles.Create(profileName, profileParms, resourceGroupName);
    }
}

بمجرد إنشاء ملف التعريف، نقوم بإنشاء نقطة نهاية.

private static void CreateCdnEndpoint(CdnManagementClient cdn)
{
    if (endpointAlreadyExists)
    {
        Console.WriteLine("Profile {0} already exists.", profileName);
    }
    else
    {
        Console.WriteLine("Creating endpoint {0} on profile {1}.", endpointName, profileName);
        EndpointCreateParameters endpointParms =
            new EndpointCreateParameters()
            {
                Origins = new List<DeepCreatedOrigin>() { new DeepCreatedOrigin("Contoso", "www.contoso.com") },
                IsHttpAllowed = true,
                IsHttpsAllowed = true,
                Location = resourceLocation
            };
        cdn.Endpoints.Create(endpointName, endpointParms, profileName, resourceGroupName);
    }
}

إشعار

يعين المثال أعلاه نقطة النهاية أصلاً يسمى Contoso باسم مضيف www.contoso.com. يجب تغيير هذا للإشارة إلى اسم مضيف الأصل الخاص بك.

إزالة نقطة نهاية

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

private static void PromptPurgeCdnEndpoint(CdnManagementClient cdn)
{
    if (PromptUser(String.Format("Purge CDN endpoint {0}?", endpointName)))
    {
        Console.WriteLine("Purging endpoint. Please wait...");
        cdn.Endpoints.PurgeContent(resourceGroupName, profileName, endpointName, new List<string>() { "/*" });
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

إشعار

في المثال السابق، تشير السلسلة /* إلى أنني أريد إزالة كل شيء في جذر مسار نقطة النهاية. وهذا يعادل التحقق من إزالة الكل في مربع الحوار "إزالة" مدخل Microsoft Azure. في CreateCdnProfile الأسلوب ، قمت بإنشاء ملف التعريف الخاص بنا ك Azure CDN من ملف تعريف Edgio باستخدام التعليمات البرمجية Sku = new Sku(SkuName.StandardVerizon)، لذلك سيكون هذا ناجحا.

حذف ملفات تعريف ونقاط نهاية CDN

تحذف الطرق الأخيرة نقطة النهاية وملف التعريف الخاص بنا.

private static void PromptDeleteCdnEndpoint(CdnManagementClient cdn)
{
    if(PromptUser(String.Format("Delete CDN endpoint {0} on profile {1}?", endpointName, profileName)))
    {
        Console.WriteLine("Deleting endpoint. Please wait...");
        cdn.Endpoints.DeleteIfExists(endpointName, profileName, resourceGroupName);
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

private static void PromptDeleteCdnProfile(CdnManagementClient cdn)
{
    if(PromptUser(String.Format("Delete CDN profile {0}?", profileName)))
    {
        Console.WriteLine("Deleting profile. Please wait...");
        cdn.Profiles.DeleteIfExists(profileName, resourceGroupName);
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

تشغيل البرنامج

يمكننا الآن تحويل البرنامج برمجيًا وتشغيله بالنقر فوق زر البدء في Visual Studio.

تشغيل البرنامج

عندما يصل البرنامج إلى المطالبة أعلاه، يجب أن تكون قادرًا على العودة إلى مجموعة الموارد الخاصة بك في مدخل Microsoft Azure ورؤية أنه تم إنشاء ملف التعريف.

نجاح!

يمكننا بعد ذلك تأكيد المطالبات لتشغيل بقية البرنامج.

اكتمال البرنامج

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

لمشاهدة المشروع المكتمل من هذه المعاينة، قم بتنزيل العينة.

للعثور على مزيد من الوثائق حول مكتبة إدارة Azure CDN ل .NET، اعرض المرجع على MSDN.

إدارة موارد CDN باستخدام PowerShell.