Начало работы с HTTP-запросами гибридных подключений Azure Relay в .NET

В этом кратком руководстве описано, как создать приложения .NET, которые отправляют и получают сообщения по протоколу HTTP. Приложения используют функцию гибридных подключений службы Azure Relay. См. дополнительные сведения о службе Azure Relay.

При работе с этим кратким руководством вы выполните следующие задачи:

  1. Создайте пространство имен ретранслятора с помощью портала Azure.
  2. Создайте гибридное подключение в этом пространстве имен с помощью портала Azure.
  3. Создайте серверное консольное приложение (прослушиватель) для получения сообщений.
  4. Создайте клиентское консольное приложение (отправитель) для отправки сообщений.
  5. Запустите приложения.

Предварительные требования

Для работы с данным руководством вам потребуется:

Создание пространства имен

  1. Войдите на портал Azure.

  2. Выберите Создать ресурс. Выберите Интеграция > Ретрансляция. Если пункт Ретрансляция в списке отсутствует, щелкните Просмотреть все в правом верхнем углу.

  3. Выберите Создать и введите имя пространства имен в поле Имя. Портал Azure проверит, доступно ли это имя.

  4. Выберите подписку Azure, в которой будет создано пространство имен.

  5. Выберите существующую группу ресурсов, в которую будет размещено это пространство имен, или создайте новую.

  6. Выберите страну или регион для размещения пространства имен.

    Создание пространства имен

  7. Нажмите кнопку создания. Портал Azure создаст пространство имен и включит его. Через несколько минут система подготовит к работе ресурсы для вашей учетной записи.

Получение учетных данных управления

  1. Нажмите Все ресурсы и выберите созданное имя пространства имен.

  2. Выберите Политики общего доступа.

  3. В окне Политики общего доступа выберите RootManageSharedAccessKey.

  4. В разделе SAS Policy: RootManageSharedAccessKey (Политика SAS: RootManageSharedAccessKey) нажмите кнопку Копировать рядом с элементом Первичная строка подключения. Строка подключения будет скопирована в буфер обмена для дальнейшего использования. Вставьте на время эти значения в Блокноте или любом другом месте.

  5. Повторите предыдущий шаг, скопировав и вставив значение первичного ключа во временное расположение для последующего использования.

    Строка подключения

Создание гибридного подключения

Убедитесь, что создано пространство имен ретранслятора.

  1. Войдите на портал Azure.

  2. В меню слева выберите Все ресурсы.

  3. Выберите пространство имен, в котором нужно создать гибридное подключение. В нашем примере это mynewns.

  4. В разделе Relay namespace (Пространство имен ретранслятора) выберите Гибридные подключения.

    Создание гибридного подключения

  5. В окне обзора пространств имен выберите + Гибридное подключение.

    Выбор гибридного подключения

  6. В разделе Создание гибридного подключения введите имя гибридного подключения. Не изменяйте остальные значения по умолчанию.

    Нажмите кнопку "Создать"

  7. Нажмите кнопку создания.

Создание серверного приложения (прослушивателя)

Создайте в Visual Studio консольное приложение C# для прослушивания и получения сообщений, отправленных ретранслятором.

Создание консольного приложение

В Visual Studio создайте проект Консольное приложение (.NET Framework).

Добавление пакета ретранслятора NuGet

  1. Щелкните созданный проект правой кнопкой мыши и выберите Управление пакетами NuGet.
  2. Выберите параметр Включить предварительные выпуски.
  3. Выберите Обзор и выполните поиск по ключевой фразе Microsoft.Azure.Relay. В результатах поиска выберите Ретранслятор Microsoft Azure.
  4. При выборе версии укажите 2.0.0-preview1-20180523.
  5. Выберите Установить для завершения установки. Закройте диалоговое окно.

Написание кода для получения сообщений

  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;
    
        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).

Добавление пакета ретранслятора NuGet

  1. Щелкните созданный проект правой кнопкой мыши и выберите Управление пакетами NuGet.
  2. Выберите параметр Включить предварительные выпуски.
  3. Выберите Обзор и выполните поиск по ключевой фразе Microsoft.Azure.Relay. В результатах поиска выберите Ретранслятор Microsoft Azure.
  4. При выборе версии укажите 2.0.0-preview1-20180523.
  5. Выберите Установить для завершения установки. Закройте диалоговое окно.

Написание кода для отправки запросов

  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, чтобы получить сведения о гибридном подключении. Замените заполнители в скобках значениями, которые получены при создании гибридного подключения. Необходимо использовать полное имя пространства имен.

    private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
    private const string ConnectionName = "{HybridConnectionName}";
    private const string KeyName = "{SASKeyName}";
    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. Теперь, чтобы закрыть окна консоли, в обоих ее окнах нажмите клавишу ВВОД.

Поздравляем, вы создали готовое приложение для гибридных подключений!

Дальнейшие действия

В этом кратком руководстве описано, как создать клиентские и серверные приложения .NET, которые отправляют и получают сообщения по протоколу HTTP. Функция гибридных подключений службы Azure Relay также поддерживает использование протокола WebSocket для отправки и получения сообщений. См. дополнительные сведения об использовании протокола WebSocket с гибридными подключениями Azure Relay.

В этом кратком руководстве описано, как использовать .NET Framework для создания клиентских и серверных приложений. Сведения о том, как создавать клиентские и серверные приложения с помощью Node.js, см. в руководствах по использованию Node.js и WebSocket или Node.js и HTTP.