Introducción a las solicitudes HTTP de Conexiones híbridas de Relay en .NETGet started with Relay Hybrid Connections HTTP requests in .NET

En esta guía de inicio rápido, creará aplicaciones de remitente y receptor de .NET que envían y reciben mensajes mediante el protocolo HTTP.In this quickstart, you create .NET sender and receiver applications that send and receive messages by using the HTTP protocol. Las aplicaciones usan la característica Conexiones híbridas de Azure Relay.The applications use Hybrid Connections feature of Azure Relay. Para información acerca de Azure Relay en general, consulte Azure Relay.To learn about Azure Relay in general, see Azure Relay.

En esta guía de inicio rápido, realizará los siguientes pasos:In this quickstart, you take the following steps:

  1. Creación de un espacio de nombres de Relay mediante Azure Portal.Create a Relay namespace by using the Azure portal.
  2. Creación de una conexión híbrida en dicho espacio de nombres mediante Azure Portal.Create a hybrid connection in that namespace by using the Azure portal.
  3. Escritura de una aplicación de consola de servidor (de escucha) para recibir mensajes.Write a server (listener) console application to receive messages.
  4. Escritura de una aplicación de consola de cliente (remitente) para enviar mensajes.Write a client (sender) console application to send messages.
  5. Ejecución de aplicaciones.Run applications.

PrerequisitesPrerequisites

Para completar este tutorial, debe cumplir los siguientes requisitos previos:To complete this tutorial, you need the following prerequisites:

Creación de un espacio de nombresCreate a namespace

  1. Inicie sesión en Azure Portal.Sign in to the Azure portal.

  2. Seleccione Crear un recurso.Select Create a resource. Seleccione Integración > Retransmisión.Then, select Integration > Relay. Si no ve Retransmisión en la lista, seleccione Ver todo en la esquina superior derecha.If you don't see Relay in the list, select See All in the top-right corner.

  3. Seleccione Crear y escriba un nombre de espacio de nombres en el campo Nombre.Select Create, and enter a namespace name in the Name field. Azure Portal comprueba si el nombre está disponible.Azure portal checks to see if the name is available.

  4. Elija la suscripción de Azure en la que se va a crear el espacio de nombres.Choose an Azure subscription in which to create the namespace.

  5. En Grupo de recursos, elija un grupo de recursos existente en el que se colocará el espacio de nombres o cree uno.For Resource group, choose an existing resource group in which to place the namespace, or create a new one.

  6. Seleccione el país o región donde se debe hospedar el espacio de nombres.Select the country or region in which your namespace should be hosted.

    Crear un espacio de nombres

  7. Seleccione Crear.Select Create. Azure Portal crea ahora el espacio de nombres del servicio y lo habilita.The Azure portal creates your namespace and enables it. Tras unos minutos, el sistema realiza el aprovisionamiento de los recursos para la cuenta.After a few minutes, the system provisions resources for your account.

Obtención de las credenciales de administraciónGet management credentials

  1. Seleccione Todos los recursos y, después, seleccione el nombre del espacio de nombres recién creado.Select All resources, and then choose the newly created namespace name.

  2. Seleccione Directivas de acceso compartido.Select Shared access policies.

  3. En Directivas de acceso compartido, seleccione RootManageSharedAccessKey.Under Shared access policies, select RootManageSharedAccessKey.

  4. En Directiva SAS: RootManageSharedAccessKey, haga clic en el botón Copiar situado junto a Cadena de conexión principal.Under SAS Policy: RootManageSharedAccessKey, select the Copy button next to Primary Connection String. Esta acción copia la cadena de conexión en el Portapapeles para su uso posterior.This action copies the connection string to your clipboard for later use. Pegue este valor en el Bloc de notas o cualquier otra ubicación temporal.Paste this value into Notepad or some other temporary location.

  5. Repita el paso anterior para copiar y pegar el valor de Clave principal en una ubicación temporal para su uso posterior.Repeat the preceding step to copy and paste the value of Primary key to a temporary location for later use.

    connection-string

Create a hybrid connectionCreate a hybrid connection

Asegúrese de haber creado un espacio de nombres de Relay.Ensure that you have already created a Relay namespace.

  1. Inicie sesión en Azure Portal.Sign in to the Azure portal.

  2. En el menú izquierdo, seleccione Todos los recursos.In the left menu, select All resources.

  3. Seleccione el espacio de nombres en el que quiere crear la conexión híbrida.Select the namespace where you want to create the hybrid connection. En este caso, es mynewns.In this case, it is mynewns.

  4. En Relay namespace (Espacio de nombres de Relay), seleccione Conexiones híbridas.Under Relay namespace, select Hybrid Connections.

    Create a hybrid connection

  5. En la ventana de información general del espacio de nombres, haga clic en + Hybrid Connection (+ Conexión híbrida).In the namespace overview window, select + Hybrid Connection

    Seleccione la conexión híbrida

  6. En Crear conexión híbrida, escriba un valor para el nombre de la conexión híbrida.Under Create Hybrid Connection, enter a value for the hybrid connection name. Deje los demás valores predeterminados.Leave the other default values.

    Seleccionar Nuevo

  7. Seleccione Crear.Select Create.

Creación de una aplicación de servidor (agente de escucha)Create a server application (listener)

En Visual Studio, escriba una aplicación de consola en C# para escuchar y recibir mensajes de Relay.In Visual Studio, write a C# console application to listen for and receive messages from the relay.

Creación de una aplicación de consolaCreate a console application

En Visual Studio, cree un nuevo proyecto de Aplicación de consola (.NET Framework) .In Visual Studio, create a new Console App (.NET Framework) project.

Adición del paquete Relay NuGetAdd the Relay NuGet package

  1. Haga clic con el botón derecho en el proyecto recién creado y seleccione Administrar paquetes NuGet.Right-click the newly created project, and then select Manage NuGet Packages.
  2. Seleccione la opción Incluir versión preliminar.Select Include prerelease option.
  3. Seleccione Examinar y, a continuación, busque Microsoft.Azure.Relay.Select Browse, and then search for Microsoft.Azure.Relay. En los resultados de la búsqueda, seleccione Microsoft Azure Relay.In the search results, select Microsoft Azure Relay.
  4. Para la versión, seleccione 2.0.0-preview1-20180523.For the version, select 2.0.0-preview1-20180523.
  5. Seleccione Instalar para completar la instalación.Select Install to complete the installation. Cierre el cuadro de diálogo.Close the dialog box.

Escritura de código para recibir mensajesWrite code to receive messages

  1. En la parte superior del archivo Program.cs, reemplace las instrucciones using existentes por las siguientes instrucciones using:At the top of the Program.cs file, replace the existing using statements with the following using statements:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.Relay;
    using System.Net;
    
  2. Agregue constantes a la clase Program para los detalles de la conexión híbrida.Add constants to the Program class for the hybrid connection details. Reemplace los marcadores de posición entre corchetes por los valores que obtuvo al crear la conexión híbrida.Replace the placeholders in brackets with the values that you obtained when you created the hybrid connection. Asegúrese de utilizar el nombre de espacio de nombres completo.Be sure to use the fully qualified namespace name.

    // 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. Agregue el método RunAsync a la clase Program:Add the RunAsync method to the Program class:

    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. Agregue la siguiente línea de código al método Main de la clase Program:Add the following line of code to the Main method in the Program class:

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

    Este es el aspecto que debería tener el archivo Program.cs completado:The completed Program.cs file should look like this:

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

Creación de una aplicación de cliente (remitente)Create a client application (sender)

En Visual Studio, escriba una aplicación de consola en C# para enviar mensajes a Relay.In Visual Studio, write a C# console application to send messages to the relay.

Creación de una aplicación de consolaCreate a console application

Si ha desactivado la opción que indica que se requiere la autorización del cliente al crear la retransmisión, puede enviar solicitudes a la dirección URL de conexiones híbridas con un explorador.If you have disabled the "Requires Client Authorization" option when creating the Relay, you can send requests to the Hybrid Connections URL with any browser. Para acceder a los puntos de conexión protegidos, debe crear y pasar un token en el encabezado ServiceBusAuthorization, que se muestra aquí.For accessing protected endpoints, you need to create and pass a token in the ServiceBusAuthorization header, which is shown here.

En Visual Studio, cree un nuevo proyecto de Aplicación de consola (.NET Framework) .In Visual Studio, create a new Console App (.NET Framework) project.

Adición del paquete Relay NuGetAdd the Relay NuGet package

  1. Haga clic con el botón derecho en el proyecto recién creado y seleccione Administrar paquetes NuGet.Right-click the newly created project, and then select Manage NuGet Packages.
  2. Seleccione la opción Incluir versión preliminar.Select Include prerelease option.
  3. Seleccione Examinar y, a continuación, busque Microsoft.Azure.Relay.Select Browse, and then search for Microsoft.Azure.Relay. En los resultados de la búsqueda, seleccione Microsoft Azure Relay.In the search results, select Microsoft Azure Relay.
  4. Para la versión, seleccione 2.0.0-preview1-20180523.For the version, select 2.0.0-preview1-20180523.
  5. Seleccione Instalar para completar la instalación.Select Install to complete the installation. Cierre el cuadro de diálogo.Close the dialog box.

Escritura de código para enviar solicitudesWrite code to send requests

  1. En la parte superior del archivo Program.cs, reemplace las instrucciones using existentes por las siguientes instrucciones using:At the top of the Program.cs file, replace the existing using statements with the following using statements:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Net.Http;
    using Microsoft.Azure.Relay;
    
  2. Agregue constantes a la clase Program para los detalles de la conexión híbrida.Add constants to the Program class for the hybrid connection details. Reemplace los marcadores de posición entre corchetes por los valores que obtuvo al crear la conexión híbrida.Replace the placeholders in brackets with the values that you obtained when you created the hybrid connection. Asegúrese de utilizar el nombre de espacio de nombres completo.Be sure to use the fully qualified namespace name.

    private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
    private const string ConnectionName = "{HybridConnectionName}";
    private const string KeyName = "{SASKeyName}";
    private const string Key = "{SASKey}";
    
  3. Agregue el siguiente método a la clase Program:Add the following method to the Program class:

    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. Agregue la siguiente línea de código al método Main de la clase Program.Add the following line of code to the Main method in the Program class.

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

    El archivo Program.cs debería tener el siguiente aspecto:The Program.cs should look like this:

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

Ejecución de las aplicacionesRun the applications

  1. Ejecute la aplicación de servidor.Run the server application. Verá el texto siguiente en la ventana de la consola:You see the following text in the console window:

    Online
    Server listening
    
  2. Ejecute la aplicación cliente.Run the client application. Verá hello! en la ventana cliente.You see hello! in the client window. El cliente envió una solicitud HTTP al servidor y este respondió con hello!.The client sent an HTTP request to the server, and server responded with a hello!.

  3. Ahora, para cerrar las ventanas de la consola, presione ENTRAR en ambas ventanas de la consola.Now, to close the console windows, press ENTER in both the console windows.

Enhorabuena, ha creado una aplicación de Conexiones híbridas completa.Congratulations, you've created a complete Hybrid Connections application!

Pasos siguientesNext steps

En esta guía de inicio rápido, ha creado aplicaciones de cliente y servidor de .NET que han usado HTTP para enviar y recibir mensajes.In this quickstart, you created .NET client and server applications that used HTTP to send and receive messages. La característica Conexiones híbridas de Azure Relay también admite el uso de WebSockets para enviar y recibir mensajes.The Hybrid Connections feature of Azure Relay also supports using WebSockets to send and receive messages. Para aprender a usar WebSockets con Conexiones híbridas de Azure Relay, consulte la Guía de inicio rápido de WebSockets.To learn how to use WebSockets with Azure Relay Hybrid Connections, see the WebSockets quickstart.

En esta guía de inicio rápido ha usado .NET Framework para crear aplicaciones cliente y servidor.In this quickstart, you used .NET Framework to create client and server applications. Para aprender a escribir aplicaciones cliente y servidor con Node.js, consulte la Guía de inicio rápido de WebSockets en Node.js o la Guía de inicio rápido de HTTP para Node.js.To learn how to write client and server applications using Node.js, see the Node.js WebSockets quickstart or the Node.js HTTP quickstart.