Introdução aos pedidos HTTP das Ligações Híbridas do Azure Relay em .NET
Neste início rápido, vai criar aplicações de remetente e recetor .NET que enviam e recebem mensagens através do protocolo HTTP. As aplicações utilizam a funcionalidade Ligações Híbridas do Reencaminhamento do Azure. Para saber mais sobre o Reencaminhamento do Azure em geral, veja Reencaminhamento do Azure.
Neste início rápido, siga os seguintes passos:
- Crie um espaço de nomes de Reencaminhamento com o Portal do Azure.
- Crie uma ligação híbrida nesse espaço de nomes, com o portal do Azure.
- Escrever uma aplicação de consola (serviço de escuta) de servidor para receber mensagens.
- Escrever uma aplicação de consola (remetente) de cliente para enviar mensagens.
- Executar aplicações.
Pré-requisitos
Para concluir este tutorial, precisa dos seguintes pré-requisitos:
- Visual Studio 2019 ou posterior. Os exemplos neste tutorial utilizam o Visual Studio 2022.
- Uma subscrição do Azure. Se não tiver uma, crie uma conta gratuita antes de começar.
Criar um espaço de nomes
Inicie sessão no portal do Azure.
Selecione Todos os serviços no menu esquerdo. Selecione Integração, procure Reencaminhamentos, mova o rato sobre Reencaminhamentos e, em seguida, selecione Criar.
Na página Criar espaço de nomes , siga estes passos:
Escolha uma subscrição do Azure para criar o espaço de nomes.
Para Grupo de recursos, escolha um grupo de recursos existente no qual colocar o espaço de nomes ou crie um novo.
Introduza um nome para o espaço de nomes do Reencaminhamento.
Selecione a região na qual o espaço de nomes deve ser alojado.
Selecione Rever + criar na parte inferior da página.
Na página Rever + criar , selecione Criar.
Após alguns minutos, verá a página Reencaminhamento do espaço de nomes.
Obter credenciais de gestão
Na página Reencaminhamento , selecione Políticas de acesso partilhado no menu esquerdo. `
Na página Políticas de acesso partilhado , selecione RootManageSharedAccessKey.
Em Política SAS: RootManageSharedAccessKey, selecione o botão Copiar junto a Cadeia de Ligação Primária. Esta ação copia a cadeia de ligação para a área de transferência para utilização posterior. Cole este valor no Bloco de Notas ou noutra localização temporária.
Repita o passo anterior para copiar e colar o valor da Chave primária para uma localização temporária para utilizar mais tarde.
Criar uma ligação híbrida
Na página Reencaminhamento do espaço de nomes, siga estes passos para criar uma ligação híbrida.
No menu esquerdo, Em Entidades, selecione Ligações Híbridas e, em seguida, selecione + Ligação Híbrida.
Na página Criar Ligação Híbrida , introduza um nome para a ligação híbrida e selecione Criar.
Criar uma aplicação de servidor (serviço de escuta)
No Visual Studio, crie uma aplicação de consola C# para ouvir e receber mensagens do reencaminhamento.
Criar uma aplicação de consola
No Visual Studio, crie um novo projeto de Aplicação de Consola (.NET Framework).
Adicionar o pacote NuGet de Reencaminhamento
- Clique com o botão direito do rato no projeto recém-criado e, em seguida, selecione Gerir Pacotes NuGet.
- Selecione Procurar e, em seguida, procure Microsoft.Azure.Relay. Nos resultados da pesquisa, selecione Reencaminhamento do Microsoft Azure.
- Selecione Instalar para concluir a instalação. Feche a caixa de diálogo.
Escrever código para receber mensagens
Na parte superior do ficheiro Program.cs, substitua as instruções
using
existentes pelas seguintes instruçõesusing
:using System; using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.Relay; using System.Net;
Adicione constantes à classe
Program
, para obter os detalhes da ligação híbrida. Substitua os marcadores de posição entre parênteses retos pelos valores que obteve quando criou a ligação híbrida. Certifique-se de que utiliza o nome de espaço de nomes totalmente qualificado.// 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}";
Adicione o método
RunAsync
à classeProgram
: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(); }
Adicione a seguinte linha de código ao método
Main
na classeProgram
:RunAsync().GetAwaiter().GetResult();
O ficheiro Program.cs completo deve ter o seguinte aspeto:
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(); } } }
Criar uma aplicação cliente (remetente)
No Visual Studio, crie uma aplicação de consola C# para enviar mensagens para o reencaminhamento.
Criar uma aplicação de consola
Se tiver desativado a opção "Requer Autorização do Cliente" ao criar o Reencaminhamento, pode enviar os pedidos para o URL de Ligações Híbridas com qualquer browser. Para aceder a pontos finais protegidos, tem de criar e transmitir um token no cabeçalho ServiceBusAuthorization
, mostrado aqui.
No Visual Studio, crie um novo projeto de Aplicação de Consola (.NET Framework).
Adicionar o pacote NuGet de Reencaminhamento
- Clique com o botão direito do rato no projeto recém-criado e, em seguida, selecione Gerir Pacotes NuGet.
- Selecione a opção Incluir pré-lançamento.
- Selecione Procurar e, em seguida, procure Microsoft.Azure.Relay. Nos resultados da pesquisa, selecione Reencaminhamento do Microsoft Azure.
- Selecione Instalar para concluir a instalação. Feche a caixa de diálogo.
Escrever código para enviar pedidos
Na parte superior do ficheiro Program.cs, substitua as instruções
using
existentes pelas seguintes instruçõesusing
:using System; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Net.Http; using Microsoft.Azure.Relay;
Adicione constantes à classe
Program
, para obter os detalhes da ligação híbrida. Substitua os marcadores de posição entre parênteses retos pelos valores que obteve quando criou a ligação híbrida. Certifique-se de que utiliza o nome de espaço de nomes totalmente qualificado.private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net"; private const string ConnectionName = "{HybridConnectionName}"; private const string KeyName = "{SASKeyName}"; private const string Key = "{SASKey}";
Adicione o seguinte método à classe
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(); }
Adicione a seguinte linha de código ao método
Main
na classeProgram
.RunAsync().GetAwaiter().GetResult();
O ficheiro Program.cs deve ter o seguinte aspeto:
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()); } } }
Executar as aplicações
Execute a aplicação de servidor. Verá o seguinte texto na janela da consola:
Online Server listening
Execute a aplicação cliente. Verá
hello!
na janela do cliente. O cliente enviou um pedido HTTP para o servidor e o servidor respondeu com umhello!
.Agora, para fechar as janelas da consola, prima ENTER em ambas as janelas da consola.
Parabéns, criou uma aplicação de Ligações Híbridas completa!
Passos seguintes
Neste início rápido, criou aplicações de cliente e servidor .NET que utilizaram HTTP para enviar e receber mensagens. A funcionalidade Ligações Híbridas do Reencaminhamento do Azure também suporta a utilização de WebSockets para enviar e receber mensagens. Para saber como utilizar WebSockets com Ligações Híbridas de Reencaminhamento do Azure, veja o início rápido webSockets.
Neste início rápido, utilizou .NET Framework para criar aplicações cliente e de servidor. Para saber como escrever aplicações de cliente e servidor com Node.js, consulte o início rápidoNode.js WebSockets ou o início rápido http doNode.js.