Aan de slag met HTTP-aanvragen voor hybride verbindingen van Relay in .NET
In deze snelstart maakt u .NET maakt u toepassingen voor afzenders en ontvangers waarmee berichten worden verzonden en ontvangen met behulp van het HTTP-protocol. De toepassingen maken gebruik van de functie Hybride verbindingen van Azure Relay. Zie Azure Relay voor meer informatie over Azure Relay in het algemeen.
In deze snelstart voert u de volgende stappen uit:
- Een Relay-naamruimte maken met behulp van Azure Portal.
- Een hybride verbinding in die naamruimte maken met behulp van Azure Portal.
- Een serverconsoletoepassing (listener) schrijven om berichten te ontvangen.
- Een clientconsoletoepassing (afzender) schrijven om berichten te verzenden.
- Toepassingen uitvoeren.
Vereisten
Voor het voltooien van deze zelfstudie moet aan de volgende vereisten worden voldaan:
- Visual Studio 2019 of hoger. In de voorbeelden in deze zelfstudie wordt Visual Studio 2022 gebruikt.
- Een Azure-abonnement. Als u nog geen abonnement hebt, maakt u een gratis account voordat u begint.
Een naamruimte maken
Meld u aan bij het Azure-portaal.
Selecteer Alle services in het linkermenu. Selecteer Integratie, zoek naar Relays, beweeg de muis over Relays en selecteer Vervolgens Maken.
Voer op de pagina Naamruimte maken de volgende stappen uit:
Kies een Azure-abonnement waarin u de naamruimte wilt maken.
Kies bij Resourcegroep een bestaande resourcegroep waarin de naamruimte moet worden geplaatst of maak een nieuwe resourcegroep.
Voer een naam in voor de Relay-naamruimte.
Selecteer de regio waarin uw naamruimte moet worden gehost.
Selecteer Controleren en maken onderaan de pagina.
Selecteer Maken op de pagina Beoordelen en maken.
Na enkele minuten ziet u de Relay-pagina voor de naamruimte.
Beheerreferenties ophalen
Selecteer op de pagina Relay beleid voor gedeelde toegang in het menu links. `
Selecteer RootManageSharedAccessKey op de pagina Beleid voor gedeelde toegang.
Selecteer onder SAS-beleid: RootManageSharedAccessKey de knop Kopiëren naast primaire verbindingsreeks. Met deze actie kopieert u de verbindingsreeks naar het Klembord voor later gebruik. Plak deze waarde in Kladblok of een andere tijdelijke locatie.
Herhaal de vorige stap om de waarde voor de Primaire sleutel te kopiëren en plakken naar een tijdelijke locatie zodat u deze later kunt gebruiken.
Een hybride verbinding maken
Volg deze stappen op de relaypagina voor uw naamruimte om een hybride verbinding te maken.
Selecteer hybride verbindingen in het linkermenu onder Entiteiten en selecteer vervolgens + Hybride verbinding.
Voer op de pagina Hybride verbinding maken een naam in voor de hybride verbinding en selecteer Maken.
Een servertoepassing (listener) maken
Maak in Visual Studio een C#-consoletoepassing om berichten van de Relay te beluisteren en te ontvangen.
Een consoletoepassing maken
Maak in Visual Studio een nieuw Console-app (.NET Framework)-project.
Het pakket Relay NuGet toevoegen
- Klik met de rechtermuisknop op het nieuwe project en selecteer NuGet-pakketten beheren.
- Selecteer Bladeren en zoek naar Microsoft.Azure.Relay. Selecteer Microsoft Azure Relay in de lijst met zoekresultaten.
- Selecteer Installeren om de installatie uit te voeren. Sluit het dialoogvenster.
Code schrijven om berichten te ontvangen
Vervang de bestaande
using
-instructies bovenaan het bestand Program.cs door de volgendeusing
-instructies:using System; using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.Relay; using System.Net;
Voeg constanten toe aan de klasse
Program
voor de gegevens van de hybride verbinding. Vervang de tijdelijke aanduidingen tussen punthaken door de waarden die u hebt verkregen bij het maken van de hybride verbinding. Zorg ervoor dat u de volledig gekwalificeerde naamruimte gebruikt.// 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}";
Voeg de
RunAsync
-methode toe aan de klasseProgram
: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(); }
Voeg de volgende coderegel toe aan de methode
Main
in de klasseProgram
:RunAsync().GetAwaiter().GetResult();
Het voltooide bestand Program.cs moet er als volgt uitzien:
namespace Server { using System; using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.Relay; using System.Net; 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(); } } }
Een clienttoepassing maken (afzender)
Maak in Visual Studio een C#-consoletoepassing om berichten naar de Relay te sturen.
Een consoletoepassing maken
Als u de optie 'Clientautorisatie vereist' hebt uitgeschakeld bij het maken van relay, kunt u aanvragen verzenden naar de URL voor hybride verbindingen met elke browser. Voor toegang tot beveiligde eindpunten moet u een token maken en doorgeven in de header ServiceBusAuthorization
, die hier wordt weergegeven.
Maak in Visual Studio een nieuw Console-app (.NET Framework)-project.
Het pakket Relay NuGet toevoegen
- Klik met de rechtermuisknop op het nieuwe project en selecteer NuGet-pakketten beheren.
- Selecteer de optie Prerelease insluiten.
- Selecteer Bladeren en zoek naar Microsoft.Azure.Relay. Selecteer Microsoft Azure Relay in de lijst met zoekresultaten.
- Selecteer Installeren om de installatie uit te voeren. Sluit het dialoogvenster.
Code schrijven om aanvragen te verzenden
Vervang de bestaande
using
-instructies bovenaan het bestand Program.cs door de volgendeusing
-instructies:using System; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Net.Http; using Microsoft.Azure.Relay;
Voeg constanten toe aan de klasse
Program
voor de gegevens van de hybride verbinding. Vervang de tijdelijke aanduidingen tussen punthaken door de waarden die u hebt verkregen bij het maken van de hybride verbinding. Zorg ervoor dat u de volledig gekwalificeerde naamruimte gebruikt.// 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}";
Voeg de volgende methode toe aan de klasse
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(); }
Voeg de volgende coderegel toe aan de methode
Main
in de klasseProgram
.RunAsync().GetAwaiter().GetResult();
Het bestand Program.cs moet er dan zo uitzien:
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()); } } }
Notitie
De voorbeeldcode in dit artikel maakt gebruik van een verbindingsreeks voor verificatie bij een Azure Relay-naamruimte om de zelfstudie eenvoudig te houden. U wordt aangeraden Microsoft Entra ID-verificatie te gebruiken in productieomgevingen, in plaats van gebruik te maken van verbindingsreeks s of handtekeningen voor gedeelde toegang, die gemakkelijker kunnen worden aangetast. Zie Een toepassing verifiëren en autoriseren met Microsoft Entra ID voor toegang tot Azure Relay-entiteiten en een beheerde identiteit verifiëren met Microsoft Entra ID voor toegang tot Azure Relay-entiteiten en een beheerde identiteit verifiëren met Microsoft Entra-id voor toegang tot Azure Relay-resources voor gedetailleerde informatie en voorbeeldcode voor het gebruik van de Microsoft Entra-id.
De toepassingen uitvoeren
Voer de servertoepassing uit. U ziet de volgende tekst in het consolevenster:
Online Server listening
Voer de clienttoepassing uit. U ziet
hello!
in het clientvenster. De client heeft een HTTP-aanvraag verzonden naar de server en de server heeft gereageerd met eenhello!
.Nu kunt u de consolevensters sluiten door in beide consolevenster op Enter te drukken.
Gefeliciteerd, u hebt een volledige toepassing voor hybride verbindingen gemaakt.
Volgende stappen
In deze snelstart hebt u een .NET-client- en servertoepassing gemaakt waarmee berichten worden verzonden en ontvangen met behulp van het HTTP-protocol. De functie Hybride verbindingen van Azure Relay ondersteunt tevens WebSockets voor het verzenden en ontvangen van berichten. Zie de snelstart over WebSockets voor informatie over het gebruik van WebSockets met hybride verbindingen van Azure Relay.
In deze snelstart hebt u .NET Framework gebruikt om client- en servertoepassingen te maken. Zie de snelstart over WebSockets in Node.js of de snelstart over HTTP in Node.js voor informatie over het schrijven van client- en servertoepassingen in Node.js.