Inviare richieste tramite una connessione ibrida di Inoltro di Azure
Per inviare e ricevere messaggi tramite Inoltro di Azure, è necessario saper scrivere il codice a questo scopo.
Si supponga di aver creato l'inoltro per il servizio di verifica del credito in Inoltro di Azure. Si vuole ora modificare il servizio di verifica del credito e i client che lo chiamano, in modo che possano inviare messaggi tramite l'inoltro. È necessario saper scrivere questo codice.
In questa unità vengono usate classi come HybridConnectionListener
e HttpRequestMessage
per inviare messaggi e rispondervi.
Usare TokenProvider per passare le credenziali
Quando si connettono, i componenti listener e mittente devono identificare se stessi in Inoltro di Azure. Per qualsiasi connessione ibrida, è possibile usare la classe .NET TokenProvider
per passare queste informazioni. Quando sono stati creati criteri di accesso condiviso nello spazio dei nomi, Azure ha creato una chiave primaria e una secondaria. Queste chiavi sono le credenziali che devono essere aggiunte a TokenProvider
per proteggere le comunicazioni.
Questo codice mostra come configurare le credenziali e aggiungerle 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);
Connettere un listener a Inoltro di Azure
Per connettere un listener al servizio Inoltro di Azure, è necessario creare e configurare un'istanza della classe HybridConnectionListener
. Passare l'URI per l'inoltro e TokenProvider
al costruttore.
// 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);
Sottoscrivere quindi gli eventi pertinenti nell'inoltro, ad esempio gli eventi di connessione.
listener.Connecting += (o, e) => { Console.WriteLine("Connecting"); };
listener.Offline += (o, e) => { Console.WriteLine("Offline"); };
listener.Online += (o, e) => { Console.WriteLine("Online"); };
Per configurare il modo in cui il listener risponde ai messaggi, usare la relativa proprietà RequestHandler
. Per inviare una risposta, usare 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();
};
Dopo aver configurato il listener, aprirlo per avviare l'ascolto dei messaggi. Poiché l'inoltro, il listener e il mittente sono tutti ospitati in posizioni diverse, la risposta ai messaggi può richiedere tempo. È importante usare codice asincrono per questi messaggi per evitare che l'app sembri smettere di rispondere durante l'attesa delle risposte. Notare la parola chiave asincrona await
e i nomi dei metodi asincroni nel codice seguente:
await listener.OpenAsync()
Ricordare di chiudere il listener in un punto appropriato nel codice:
await listener.CloseAsync();
Connettere un mittente a Inoltro di Azure
Per il mittente, non esiste alcun oggetto specifico di Inoltro di Azure. È possibile usare un oggetto HttpRequestMessage
standard, analogamente a quando si chiama qualsiasi servizio 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")
};
Per passare il token, aggiungerlo alle intestazioni delle richieste:
// 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);
È ora possibile inviare un messaggio usando il metodo SendAsync
e ottenere una risposta in modo asincrono:
// Send the request.
var response = await client.SendAsync(request);
// Display the result.
Console.WriteLine(await response.Content.ReadAsStringAsync());