Enviar pedidos através de uma ligação híbrida do Azure Relay
Para enviar e receber mensagens através do Azure Relay, tem de compreender como escrever o código necessário.
Suponhamos que criou o reencaminhamento para o serviço de verificação de crédito no Azure Relay. Agora, quer modificar o serviço de verificação de crédito e os clientes que o chamam, para que possam enviar mensagens através do reencaminhamento. Tem de saber como escrever este código.
Nesta unidade, usamos classes como HybridConnectionListener
e para enviar e HttpRequestMessage
responder a mensagens.
Utilizar o TokenProvider para transmitir credenciais
Os componentes de serviço de escuta e do remetente têm de ser identificados no Azure Relay quando se ligam. Para qualquer ligação híbrida, utilize a classe .NET TokenProvider
para transmitir esta informação. Quando criou uma política de acesso partilhado no espaço de nomes, o Azure criou uma chave primária e secundária. Esta chave é a credencial que irá adicionar a TokenProvider
para proteger as comunicações.
Este código mostra como configurar as credenciais e adicioná-las a TokenProvider
:
// Store credentials. In production code, keep these values in a secure location, such as Azure Key Vault.
private const string KeyName = "RootManageSharedAccessKey";
private const string Key = "<your key here>";
// Create and configure TokenProvider.
var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(KeyName, Key);
Ligar um serviço de escuta ao Azure Relay
Para ligar um serviço de escuta ao Azure Relay, pode criar e configurar uma instância da classe HybridConnectionListener
. Transmita o URI do reencaminhamento e o TokenProvider
para o construtor.
// Store the connection details.
private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
private const string ConnectionName = "{HybridConnectionName}";
// Create and configure the listener.
var listener = new HybridConnectionListener(new Uri(string.Format("sb://{0}/{1}", RelayNamespace, ConnectionName)), tokenProvider);
Em seguida, subscreva eventos relevantes no reencaminhamento, como eventos de ligação.
listener.Connecting += (o, e) => { Console.WriteLine("Connecting"); };
listener.Offline += (o, e) => { Console.WriteLine("Offline"); };
listener.Online += (o, e) => { Console.WriteLine("Online"); };
Para configurar a forma como o serviço de escuta responde às mensagens, utilize a propriedade RequestHandler
. Para enviar uma resposta, utilize StreamWriter
.
listener.RequestHandler = (context) =>
{
// Configure the response status.
context.Response.StatusCode = HttpStatusCode.OK;
context.Response.StatusDescription = "OK";
// Use a stream writer to send text back.
using (var sw = new StreamWriter(context.Response.OutputStream))
{
sw.WriteLine("hello!");
}
// Remember to close the context.
context.Response.Close();
};
Quando configurar o serviço de escuta, abra-o para começar a escutar mensagens. Como o reencaminhamento, o serviço de escuta e o remetente estão todos alojados em locais diferentes, podem demorar algum tempo a responder às mensagens. É importante usar código assíncrono para essas mensagens para garantir que seu aplicativo não pareça parar de responder enquanto aguarda respostas. Observe a palavra-chave assíncrona e os nomes de método assíncrono await
no código a seguir:
await listener.OpenAsync()
Não se esqueça de fechar o serviço de escuta num ponto adequado do código:
await listener.CloseAsync();
Ligar um remetente ao Azure Relay
Para o remetente, não existe nenhum objeto específico do Azure Relay. Pode utilizar um objeto HttpRequestMessage
padrão, tal como faria quando chama para qualquer serviço Web.
// Store the connection details.
private const string RelayNamespace = "{RelayNamespace}.servicebus.windows.net";
private const string ConnectionName = "{HybridConnectionName}";
// Formulate the URI.
var uri = new Uri(string.Format("https://{0}/{1}", RelayNamespace, ConnectionName));
// Create and configure the client. Use the Content property to specify the message text.
var client = new HttpClient();
var request = new HttpRequestMessage()
{
RequestUri = uri,
Method = HttpMethod.Get,
Content = new StringContent("Obtain credit check for Sara McMurray")
};
Para transmitir o token, adicione-o aos cabeçalhos dos pedidos:
// Create the token from the token provider.
var token = (await tokenProvider.GetTokenAsync(uri.AbsoluteUri, TimeSpan.FromHours(1))).TokenString;
// Add the token to the headers.
request.Headers.Add("ServiceBusAuthorization", token);
Agora, pode enviar uma mensagem com o método SendAsync
e obter uma resposta de forma assíncrona:
// Send the request.
var response = await client.SendAsync(request);
// Display the result.
Console.WriteLine(await response.Content.ReadAsStringAsync());