Komma igång med HTTP-begäranden för Relay-hybridanslutningar i .NET
I den här snabbstarten skapar du ett sändar- och mottagarprogram i .NET som skickar och tar emot meddelanden med HTTP-protokollet. Programmen använder funktionen Hybridanslutningar i Azure Relay. Läs mer om Azure Relay i allmänhet i Azure Relay.
I den här snabbstarten gör du följande:
- Skapa ett Relay-namnområde med Azure Portal.
- Skapa en hybridanslutning i det namnområdet med Azure Portal.
- Skriva ett serverkonsolprogram (lyssnare) för att ta emot meddelanden.
- Skriva ett klientkonsolprogram (avsändare) för att ta emot meddelanden.
- Kör program.
Förutsättningar
För att slutföra den här självstudien, finns följande förhandskrav:
- Visual Studio 2019 eller senare. Exemplen i den här självstudien använder Visual Studio 2022.
- En Azure-prenumeration Om du inte har ett konto kan du skapa ett kostnadsfritt konto innan du börjar.
Skapa ett namnområde
Logga in på Azure-portalen.
Välj Alla tjänster på den vänstra menyn. Välj Integrering, sök efter Reläer, flytta musen över Reläer och välj sedan Skapa.
Följ dessa steg på sidan Skapa namnområde :
Välj en Azure-prenumeration där du vill skapa namnområdet.
För Resursgrupp väljer du en befintlig resursgrupp där du vill placera namnområdet eller skapar en ny.
Ange ett namn för Relay-namnområdet.
Välj den region där ditt namnområde ska finnas.
Välj Granska + skapa längst ned på sidan.
På sidan Granska + skapa väljer du Skapa.
Efter några minuter visas sidan Relay för namnområdet.
Få autentiseringsuppgifter för hantering
På sidan Relay väljer du Principer för delad åtkomst på den vänstra menyn. `
På sidan Principer för delad åtkomst väljer du RootManageSharedAccessKey.
Under SAS-princip: RootManageSharedAccessKey väljer du knappen Kopiera bredvid Primär anslutningssträng. Den här åtgärden kopierar niska veze till Urklipp för senare användning. Klistra in det här värdet i Anteckningar eller på en tillfällig plats.
Upprepa föregående steg för att kopiera och klistra in värdet för primärnyckeln till en tillfällig plats för senare användning.
Skapa en hybridanslutning
På sidan Relay för ditt namnområde följer du de här stegen för att skapa en hybridanslutning.
På den vänstra menyn under Entiteter väljer du Hybridanslutningar och sedan + Hybridanslutning.
På sidan Skapa hybridanslutning anger du ett namn för hybridanslutningen och väljer Skapa.
Skapa ett serverprogram (lyssnare)
För att lyssna på och ta emot meddelanden från Relay skriver du ett C#-konsolprogram i Visual Studio.
Skapa ett konsolprogram
Skapa ett nytt projekt för Konsolprogram (.NET Framework) i Visual Studio.
Lägg till Relay NuGet-paketet
- Högerklicka på det nyskapade projektet och välj sedan Hantera NuGet-paket.
- Välj Bläddra och sök sedan efter Microsoft.Azure.Relay. I sökresultaten väljer du Microsoft Azure Relay.
- Välj Installera för att slutföra installationen. Stäng dialogrutan.
Skriv kod för att ta emot meddelanden
Ersätt de befintliga
using
-satserna överst i filen Program.cs med följandeusing
-satser:using System; using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.Relay; using System.Net;
Lägg till konstanter i klassen
Program
för hybridanslutningsinformationen. Ersätt platshållarna inom hakparentes med de värden du erhöll när du skapade hybridanslutningen. Se till att du använder det fullständiga namnområdesnamnet.// 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}";
Lägg till metoden
RunAsync
i klassenProgram
: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(); }
Lägg till följande kodrad till metoden
Main
i klassenProgram
:RunAsync().GetAwaiter().GetResult();
Den färdiga Program.cs-filen bör se ut så här:
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(); } } }
Skapa ett klientprogram (avsändare)
För att skicka meddelanden till Relay skriver du ett C#-konsolprogram i Visual Studio.
Skapa ett konsolprogram
Om du inaktiverade alternativet "Kräver klientauktorisering" när du skapar Relay kan du skicka begäranden till URL:en för hybridanslutningar med valfri webbläsare. För att komma åt skyddade slutpunkter måste du skapa och skicka en token i ServiceBusAuthorization
-huvudet, som du ser här.
Skapa ett nytt projekt för Konsolprogram (.NET Framework) i Visual Studio.
Lägg till Relay NuGet-paketet
- Högerklicka på det nyskapade projektet och välj sedan Hantera NuGet-paket.
- Välj alternativet Ta med förhandsversion.
- Välj Bläddra och sök sedan efter Microsoft.Azure.Relay. I sökresultaten väljer du Microsoft Azure Relay.
- Välj Installera för att slutföra installationen. Stäng dialogrutan.
Skriv kod för att skicka begäranden
Ersätt de befintliga
using
-satserna överst i filen Program.cs med följandeusing
-satser:using System; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Net.Http; using Microsoft.Azure.Relay;
Lägg till konstanter i klassen
Program
för hybridanslutningsinformationen. Ersätt platshållarna inom hakparentes med de värden du erhöll när du skapade hybridanslutningen. Se till att du använder det fullständiga namnområdesnamnet.// 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}";
Lägg till följande metod i klassen
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(); }
Lägg till följande kodrad till
Main
-metoden iProgram
-klassen.RunAsync().GetAwaiter().GetResult();
Program.cs bör se ut så här:
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()); } } }
Kommentar
Exempelkoden i den här artikeln använder en niska veze för att autentisera till ett Azure Relay-namnområde för att hålla självstudien enkel. Vi rekommenderar att du använder Microsoft Entra-ID-autentisering i produktionsmiljöer i stället för att använda niska veze eller signaturer för delad åtkomst, vilket är enklare att kompromettera. Detaljerad information och exempelkod för användning av Microsoft Entra-ID-autentisering finns i Autentisera och auktorisera ett program med Microsoft Entra-ID för åtkomst till Azure Relay-entiteter och Autentisera en hanterad identitet med Microsoft Entra-ID för åtkomst till Azure Relay-resurser.
Kör programmen
Kör serverprogrammet. Du kan se följande text i konsolfönstret:
Online Server listening
Kör klientprogrammet.
hello!
visas i klientfönstret. Klienten har skickat en HTTP-begäran till servern och servern svarade med enhello!
.Om du vill stänga konsolfönstret nu trycker du på RETUR i båda konsolfönsterna.
Grattis, du har skapat ett komplett hybridanslutningsprogram!
Nästa steg
I den här snabbstarten skapade du .NET-klient- och -serverprogram som använde HTTP för att skicka och ta emot meddelanden. Funktionen Hybridanslutningar i Azure Relay stöder också användningen av WebSockets för att skicka och ta emot meddelanden. Läs om hur du använder WebSockets med Azure Relay-hybridanslutningar i WebSockets-snabbstarten.
I den här snabbstarten använde du .NET Framework för att skapa klient- och serverprogram. Om du vill läsa om hur du skriver klient- och serverprogram med hjälp av Node.js läser du Node.js-snabbstarten eller Node.jsT HTTP-snabbstarten.