الشروع في العمل باستخدام طلبات Relay Hybrid Connections HTTP في .NET

في هذا التشغيل السريع، يمكنك إنشاء تطبيقات .NET المرسل والمتلقي التي ترسل الرسائل وتستقبلها باستخدام بروتوكول HTTP. تستخدم التطبيقات ميزة hybrid الاتصال ions في Azure Relay. للتعرف على Azure Relay بشكل عام، راجع Azure Relay.

في هذا التشغيل السريع، يمكنك اتخاذ الخطوات التالية:

  1. إنشاء مساحة اسم Relay باستخدام مدخل Microsoft Azure.
  2. إنشاء اتصال مختلط في مساحة الاسم هذه باستخدام مدخل Microsoft Azure.
  3. اكتب تطبيق وحدة تحكم خادم (وحدة استماع) لتلقي الرسائل.
  4. اكتب تطبيق وحدة تحكم العميل (المرسل) لإرسال الرسائل.
  5. تشغيل التطبيقات.

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

لإكمال هذا البرنامج التعليمي، تحتاج إلى المتطلبات الأساسية التالية:

  • Visual Studio 2019 أو أحدث. تستخدم الأمثلة في هذا البرنامج التعليمي Visual Studio 2022.
  • اشتراك Azure. في حال لم يكن لديك اشتراك، أنشئ حسابًا مجانيًا قبل البدء.

إنشاء مساحة اسم

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

  2. حدد كل الخدمات في القائمة اليسرى. حدد Integration، وابحث عن Relays، وحرك الماوس فوق Relays، ثم حدد Create.

    لقطة شاشة تعرض تحديد Relays -> الزر Create.

  3. في صفحة Create namespace ، اتبع الخطوات التالية:

    1. بالنسبة إلى Subscription، اختر اشتراك Azure لإنشاءnamespace.

    2. بالنسبة لـ "مجموعة الموارد"، اختر مجموعة موارد موجودة حيث توجد namespace، أو إنشاء مجموعة موارد جديدة.

    3. أدخل اسما لمساحة اسم الترحيل.

    4. حدد المنطقة التي يجب استضافة مساحة الاسم فيها.

    5. حدد مراجعة + إنشاء عند أسفل الصفحة.

      لقطة شاشة تعرض صفحة إنشاء مساحة الاسم.

    6. في صفحة مراجعة+ إنشاء حدد إنشاء.

    7. بعد بضع دقائق، سترى صفحة Relay لمساحة الاسم.

      لقطة شاشة تعرض الصفحة الرئيسية لمساحة اسم Relay.

الحصول على بيانات اعتماد الإدارة

  1. في صفحة Relay ، حدد Shared access policies في القائمة اليمنى. `

  2. في إطارShared access policies، حدد RootManageSharedAccessKey.

  3. في إطار سياسةSAS: RootManageSharedAccessKey، حدد زر نسخ سلسلة الاتصال الأساسية. يقوم هذا الإجراء بنسخ سلسلة الاتصال إلى الحافظة لاستخدامها لاحقاً. وقم بلصق هذه القيمة في المفكرة أو بعض المواقع المؤقتة الأخرى.

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

    لقطة شاشة تعرض معلومات الاتصال لمساحة اسم Relay.

إنشاء اتصال مختلط

في صفحة Relay لمساحة الاسم، اتبع هذه الخطوات لإنشاء اتصال مختلط.

  1. في القائمة اليسرى، ضمن Entities، حدد Hybrid الاتصال ions، ثم حدد + Hybrid الاتصال ion.

    لقطة شاشة تعرض صفحة hybrid الاتصال ions.

  2. في صفحة Create Hybrid الاتصال ion، أدخل اسما للاتصال المختلط، وحدد Create.

    لقطة شاشة تعرض صفحة إنشاء الاتصال المختلطة.

إنشاء تطبيق خادم (وحدة استماع)

في Visual Studio، اكتب تطبيق وحدة تحكم C# للاستماع إلى الرسائل وتلقيها من المرحل.

قم بإنشاء تطبيق وحدة تحكم

في Visual Studio، قم بإنشاء مشروع تطبيق وحدة تحكم (.NET Framework) جديد.

إضافة حزمة Relay NuGet

  1. انقر بزر الماوس الأيمن فوق المشروع الذي تم إنشاؤه حديثا، ثم حدد إدارة حزم NuGet.
  2. حدد استعراض، ثم ابحث عن Microsoft.Azure.Relay. في نتائج البحث، حدد Microsoft Azure Relay.
  3. حدد تثبيت لإكمال التثبيت. أغلق مربع الحوار.

كتابة التعليمات البرمجية لتلقي الرسائل

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

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.Relay;
    using System.Net;
    
  2. أضف ثوابت إلى Program الفئة للحصول على تفاصيل الاتصال المختلط. استبدل العناصر النائبة بين قوسين بالقيم التي حصلت عليها عند إنشاء الاتصال المختلط. تأكد من استخدام اسم مساحة الاسم المؤهل بالكامل.

    // replace {RelayNamespace} with the name of your namespace
    private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
    
    // replace {HybridConnectionName} with the name of your hybrid connection
    private const string ConnectionName = "{HybridConnectionName}";
    
    // replace {SAKKeyName} with the name of your Shared Access Policies key, which is RootManageSharedAccessKey by default
    private const string KeyName = "{SASKeyName}";
    
    // replace {SASKey} with the primary key of the namespace you saved earlier
    private const string Key = "{SASKey}";
    
  3. RunAsync أضف الأسلوب إلى Program الفئة :

    private static async Task RunAsync()
    {
        var cts = new CancellationTokenSource();
    
        var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(KeyName, Key);
        var listener = new HybridConnectionListener(new Uri(string.Format("sb://{0}/{1}", RelayNamespace, ConnectionName)), tokenProvider);
    
        // Subscribe to the status events.
        listener.Connecting += (o, e) => { Console.WriteLine("Connecting"); };
        listener.Offline += (o, e) => { Console.WriteLine("Offline"); };
        listener.Online += (o, e) => { Console.WriteLine("Online"); };
    
        // Provide an HTTP request handler
        listener.RequestHandler = (context) =>
        {
            // Do something with context.Request.Url, HttpMethod, Headers, InputStream...
            context.Response.StatusCode = HttpStatusCode.OK;
            context.Response.StatusDescription = "OK, This is pretty neat";
            using (var sw = new StreamWriter(context.Response.OutputStream))
            {
                sw.WriteLine("hello!");
            }
    
            // The context MUST be closed here
            context.Response.Close();
        };
    
        // Opening the listener establishes the control channel to
        // the Azure Relay service. The control channel is continuously 
        // maintained, and is reestablished when connectivity is disrupted.
        await listener.OpenAsync();
        Console.WriteLine("Server listening");
    
        // Start a new thread that will continuously read the console.
        await Console.In.ReadLineAsync();
    
        // Close the listener after you exit the processing loop.
        await listener.CloseAsync();
    }
    
  4. أضف السطر التالي من التعليمات البرمجية Main إلى الأسلوب في Program الفئة :

    RunAsync().GetAwaiter().GetResult();
    

    يجب أن يبدو ملف Program.cs المكتمل كما يلي:

    namespace Server
    {
        using System;
        using System.IO;
        using System.Threading;
        using System.Threading.Tasks;
        using Microsoft.Azure.Relay;
        using System.Net;
    
        public class Program
        {
            private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
            private const string ConnectionName = "{HybridConnectionName}";
            private const string KeyName = "{SASKeyName}";
            private const string Key = "{SASKey}";
    
            public static void Main(string[] args)
            {
                RunAsync().GetAwaiter().GetResult();
            }
    
            private static async Task RunAsync()
            {
                var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(KeyName, Key);
                var listener = new HybridConnectionListener(new Uri(string.Format("sb://{0}/{1}", RelayNamespace, ConnectionName)), tokenProvider);
    
                // Subscribe to the status events.
                listener.Connecting += (o, e) => { Console.WriteLine("Connecting"); };
                listener.Offline += (o, e) => { Console.WriteLine("Offline"); };
                listener.Online += (o, e) => { Console.WriteLine("Online"); };
    
                // Provide an HTTP request handler
                listener.RequestHandler = (context) =>
                {
                    // Do something with context.Request.Url, HttpMethod, Headers, InputStream...
                    context.Response.StatusCode = HttpStatusCode.OK;
                    context.Response.StatusDescription = "OK";
                    using (var sw = new StreamWriter(context.Response.OutputStream))
                    {
                        sw.WriteLine("hello!");
                    }
    
                    // The context MUST be closed here
                    context.Response.Close();
                };
    
                // Opening the listener establishes the control channel to
                // the Azure Relay service. The control channel is continuously 
                // maintained, and is reestablished when connectivity is disrupted.
                await listener.OpenAsync();
                Console.WriteLine("Server listening");
    
                // Start a new thread that will continuously read the console.
                await Console.In.ReadLineAsync();
    
                // Close the listener after you exit the processing loop.
                await listener.CloseAsync();
            }
        }
    }
    

إنشاء تطبيق عميل (مرسل)

في Visual Studio، اكتب تطبيق وحدة تحكم C# لإرسال رسائل إلى الترحيل.

قم بإنشاء تطبيق وحدة تحكم

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

في Visual Studio، قم بإنشاء مشروع تطبيق وحدة تحكم (.NET Framework) جديد.

إضافة حزمة Relay NuGet

  1. انقر بزر الماوس الأيمن فوق المشروع الذي تم إنشاؤه حديثا، ثم حدد إدارة حزم NuGet.
  2. حدد الخيار Include prerelease .
  3. حدد استعراض، ثم ابحث عن Microsoft.Azure.Relay. في نتائج البحث، حدد Microsoft Azure Relay.
  4. حدد تثبيت لإكمال التثبيت. أغلق مربع الحوار.

كتابة التعليمات البرمجية لإرسال الطلبات

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

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Net.Http;
    using Microsoft.Azure.Relay;
    
  2. أضف ثوابت إلى Program الفئة للحصول على تفاصيل الاتصال المختلط. استبدل العناصر النائبة بين قوسين بالقيم التي حصلت عليها عند إنشاء الاتصال المختلط. تأكد من استخدام اسم مساحة الاسم المؤهل بالكامل.

    // replace {RelayNamespace} with the name of your namespace
    private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
    
    // replace {HybridConnectionName} with the name of your hybrid connection
    private const string ConnectionName = "{HybridConnectionName}";
    
    // replace {SAKKeyName} with the name of your Shared Access Policies key, which is RootManageSharedAccessKey by default
    private const string KeyName = "{SASKeyName}";
    
    // replace {SASKey} with the primary key of the namespace you saved earlier
    private const string Key = "{SASKey}";
    
  3. أضف الأسلوب التالي إلى Program الفئة :

    private static async Task RunAsync()
    {
        var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
                KeyName, Key);
        var uri = new Uri(string.Format("https://{0}/{1}", RelayNamespace, ConnectionName));
        var token = (await tokenProvider.GetTokenAsync(uri.AbsoluteUri, TimeSpan.FromHours(1))).TokenString;
        var client = new HttpClient();
        var request = new HttpRequestMessage()
        {
            RequestUri = uri,
            Method = HttpMethod.Get,
        };
        request.Headers.Add("ServiceBusAuthorization", token);
        var response = await client.SendAsync(request);
        Console.WriteLine(await response.Content.ReadAsStringAsync());        Console.ReadLine();
    }
    
  4. أضف السطر التالي من التعليمات البرمجية Main إلى الأسلوب في Program الفئة .

    RunAsync().GetAwaiter().GetResult();
    

    يجب أن يبدو Program.cs كما يلي:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Net.Http;
    using Microsoft.Azure.Relay;
    
    namespace Client
    {
        class Program
        {
            private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
            private const string ConnectionName = "{HybridConnectionName}";
            private const string KeyName = "{SASKeyName}";
            private const string Key = "{SASKey}";
    
            static void Main(string[] args)
            {
                RunAsync().GetAwaiter().GetResult();
            }
    
            private static async Task RunAsync()
            {
               var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
                KeyName, Key);
                var uri = new Uri(string.Format("https://{0}/{1}", RelayNamespace, ConnectionName));
                var token = (await tokenProvider.GetTokenAsync(uri.AbsoluteUri, TimeSpan.FromHours(1))).TokenString;
                var client = new HttpClient();
                var request = new HttpRequestMessage()
                {
                    RequestUri = uri,
                    Method = HttpMethod.Get,
                };
                request.Headers.Add("ServiceBusAuthorization", token);
                var response = await client.SendAsync(request);
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }
        }
    }
    

تشغيل التطبيقات

  1. تشغيل تطبيق الخادم. ترى النص التالي في نافذة وحدة التحكم:

    Online
    Server listening
    
  2. تشغيل تطبيق العميل. hello! ترى في نافذة العميل. أرسل العميل طلب HTTP إلى الخادم، واستجاب الخادم ب hello!.

  3. الآن، لإغلاق نوافذ وحدة التحكم، اضغط على ENTER في نافذتي وحدة التحكم.

تهانينا، لقد أنشأت تطبيقا كاملا الاتصال مختلط!

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

في هذا التشغيل السريع، قمت بإنشاء تطبيقات عميل وخادم .NET التي استخدمت HTTP لإرسال الرسائل وتلقيها. تدعم ميزة الاتصال المختلطة في Azure Relay أيضا استخدام WebSockets لإرسال الرسائل وتلقيها. لمعرفة كيفية استخدام WebSockets مع azure Relay Hybrid الاتصال ions، راجع التشغيل السريع WebSockets.

في هذا التشغيل السريع، استخدمت .NET Framework لإنشاء تطبيقات العميل والخادم. لمعرفة كيفية كتابة تطبيقات العميل والخادم باستخدام Node.js، راجع التشغيل السريع Node.js WebSockets أو التشغيل السريع Node.js HTTP.