.NET’te Relay Karma Bağlantılar HTTP istekleri ile çalışmaya başlama

Bu hızlı başlangıçta, HTTP protokolunu kullanarak ileti gönderip alan .NET gönderen ve alıcı uygulamaları oluşturacaksınız. Uygulamalar Azure Relay'in Karma Bağlantılar özelliğini kullanır. Genel olarak Azure Relay hakkında bilgi edinmek için bkz . Azure Relay.

Bu hızlı başlangıçta aşağıdaki adımları uygulayacaksınız:

  1. Azure portalını kullanarak Geçiş ad alanı oluşturma.
  2. Azure portalını kullanarak o ad alanında karma bağlantı oluşturma.
  3. İleti almak için bir sunucu (dinleyici) konsol uygulaması yazma.
  4. İleti göndermek için bir istemci (gönderen) konsol uygulaması yazma.
  5. Uygulamaları çalıştırın.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdaki önkoşulları karşılamanız gerekir:

Ad alanı oluşturma

  1. Azure Portal’ında oturum açın.

  2. Soldaki menüden Tüm hizmetler'i seçin. Tümleştirme'yi seçin, Geçişler'i arayın, fareyi Geçişler'in üzerine getirin ve oluştur'u seçin.

    Geçişler -> Oluştur düğmesinin seçimini gösteren ekran görüntüsü.

  3. Ad alanı oluştur sayfasında şu adımları izleyin:

    1. Ad alanının oluşturulacağı bir Azure aboneliği seçin.

    2. Kaynak grubu için, ad alanının yerleştirileceği mevcut bir kaynak grubunu seçin veya yeni bir tane oluşturun.

    3. Geçiş ad alanı için bir ad girin.

    4. Ad alanınızın barındırılacağı bölgeyi seçin.

    5. Sayfanın alt kısmındaki Gözden geçir ve oluştur'u seçin.

      Ad alanı oluştur sayfasını gösteren ekran görüntüsü.

    6. Gözden Geçir + oluştur sayfasında Oluştur'u seçin.

    7. Birkaç dakika sonra ad alanının Geçiş sayfasını görürsünüz.

      Geçiş ad alanının giriş sayfasını gösteren ekran görüntüsü.

Yönetim kimlik bilgilerini alma

  1. Geçiş sayfasında, soldaki menüden Paylaşılan erişim ilkeleri'ni seçin. `

  2. Paylaşılan erişim ilkeleri sayfasında RootManageSharedAccessKey'i seçin.

  3. SAS İlkesi: RootManageSharedAccessKey altında, Birincil Bağlantı Dizesi'nin yanındaki Kopyala düğmesini seçin. Bu eylem, bağlantı dizesi daha sonra kullanmak üzere panonuza kopyalar. Bu değeri Not Defteri veya başka bir geçici konuma yapıştırın.

  4. Birincil anahtar değerini daha sonra kullanmak üzere kopyalayıp geçici bir konuma yapıştırarak önceki adımı tekrarlayın.

    Geçiş ad alanı için bağlantı bilgilerini gösteren ekran görüntüsü.

Karma bağlantı oluşturma

Ad alanınızın Geçiş sayfasında, karma bağlantı oluşturmak için bu adımları izleyin.

  1. Soldaki menüde Varlıklar'ın altında Karma Bağlantılar'ı ve ardından + Karma Bağlantı'yı seçin.

    Karma Bağlantılar sayfasını gösteren ekran görüntüsü.

  2. Karma Bağlantı Oluştur sayfasında, karma bağlantı için bir ad girin ve Oluştur'u seçin.

    Karma Bağlantı Oluştur sayfasını gösteren ekran görüntüsü.

Sunucu uygulaması (dinleyici) oluşturma

Geçiş hizmetinden ileti dinleyip almak için Visual Studio kullanarak bir C# konsol uygulaması yazın.

Konsol uygulaması oluşturma

Visual Studio'da yeni bir Konsol Uygulaması (.NET Framework) projesi oluşturun.

Geçiş NuGet paketini ekleme

  1. Yeni oluşturulan projeye sağ tıklayıp NuGet Paketlerini Yönet'i seçin.
  2. Göz at'ı seçip Microsoft.Azure.Relay araması yapın. Arama sonuçlarında Microsoft Azure Geçişi'ni seçin.
  3. Yüklemeyi tamamlamak için Yükle'yi seçin. İletişim kutusunu kapatın.

İleti almak için kod yazma

  1. Program.cs dosyasının üst tarafındaki using deyimlerini aşağıdaki using deyimleriyle değiştirin:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.Relay;
    using System.Net;
    
  2. Karma bağlantı ayrıntıları için sabitleri Program sınıfına ekleyin. Köşeli ayraçlar içindeki yer tutucuları, karma bağlantıyı oluştururken aldığınız değerlerle değiştirin. Tam ad alanı adını kullandığınızdan emin olun.

    // 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}";
    
  3. RunAsync yönetimini Program sınıfına ekleyin:

    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();
    }
    
  4. Aşağıdaki kod satırını Program sınıfındaki Main yöntemine ekleyin:

    RunAsync().GetAwaiter().GetResult();
    

    Tamamlanmış Program.cs dosyası aşağıdaki gibi görünmelidir:

    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();
            }
        }
    }
    

İstemci uygulaması (gönderici) oluşturma

Geçiş hizmetine ileti göndermek Visual Studio kullanarak bir C# konsol uygulaması yazın.

Konsol uygulaması oluşturma

Geçiş oluştururken "İstemci Yetkilendirmesi Gerekiyor" seçeneğini devre dışı bırakmışsanız, herhangi bir tarayıcıyla Karma Bağlantılar URL'sine istek gönderebilirsiniz. Korumalı uç noktalara erişmek için burada gösterilen ServiceBusAuthorization üst bilgisinde bir belirteç oluşturup geçirmeniz gerekir.

Visual Studio'da yeni bir Konsol Uygulaması (.NET Framework) projesi oluşturun.

Geçiş NuGet paketini ekleme

  1. Yeni oluşturulan projeye sağ tıklayıp NuGet Paketlerini Yönet'i seçin.
  2. Ön sürümü dahil et seçeneğini işaretleyin.
  3. Göz at'ı seçip Microsoft.Azure.Relay araması yapın. Arama sonuçlarında Microsoft Azure Geçişi'ni seçin.
  4. Yüklemeyi tamamlamak için Yükle'yi seçin. İletişim kutusunu kapatın.

İstek göndermek için kod yazma

  1. Program.cs dosyasının üst tarafındaki using deyimlerini aşağıdaki using deyimleriyle değiştirin:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Net.Http;
    using Microsoft.Azure.Relay;
    
  2. Karma bağlantı ayrıntıları için sabitleri Program sınıfına ekleyin. Köşeli ayraçlar içindeki yer tutucuları, karma bağlantıyı oluştururken aldığınız değerlerle değiştirin. Tam ad alanı adını kullandığınızdan emin olun.

    // 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}";
    
  3. Program sınıfına aşağıdaki yöntemi ekleyin:

    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();
    }
    
  4. Aşağıdaki kod satırını Program sınıfındaki Main yöntemine ekleyin.

    RunAsync().GetAwaiter().GetResult();
    

    Program.cs aşağıdaki gibi görünmelidir:

    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());
            }
        }
    }
    

Not

Bu makaledeki örnek kod, öğreticiyi basit tutmak için Azure Relay ad alanında kimlik doğrulaması yapmak için bir bağlantı dizesi kullanır. Daha kolay ele geçirilebilen bağlantı dizesi veya paylaşılan erişim imzaları kullanmak yerine üretim ortamlarında Microsoft Entra Id kimlik doğrulamayı kullanmanızı öneririz. Microsoft Entra Id kimlik doğrulamasını kullanmaya yönelik ayrıntılı bilgi ve örnek kod için bkz . Azure Relay varlıklarına erişmek için Microsoft Entra Id ile bir uygulamanın kimliğini doğrulama ve yetkilendirme ve Azure Relay kaynaklarına erişmek için Microsoft Entra Kimliği ile yönetilen kimliğin kimliğini doğrulama.

Uygulamaları çalıştırma

  1. Sunucu uygulamasını çalıştırın. Konsol penceresinde aşağıdaki metni görürsünüz:

    Online
    Server listening
    
  2. İstemci uygulamasını çalıştırın. İstemci penceresinde hello! görürsünüz. İstemci sunucuya bir HTTP isteği gönderdi ve sunucu ile hello!yanıt verdi.

  3. Şimdi, konsol pencerelerini kapatmak için her iki pencerede ENTER’a basın.

Tebrikler, eksiksiz bir Karma Bağlantılar uygulaması oluşturdunuz!

Sonraki adımlar

Bu hızlı başlangıçta, ileti göndermek ve almak için HTTP kullanan .NET istemci ve sunucu uygulamaları oluşturdunuz. Azure Relay'in Karma Bağlantılar özelliği, ileti göndermek ve almak için WebSockets kullanmayı da destekler. WebSockets'i Azure Relay Karma Bağlantıları ile kullanmayı öğrenmek için bkz . WebSockets hızlı başlangıcı.

Bu hızlı başlangıçta istemci ve sunucu uygulamaları oluşturmak için .NET Framework kullandınız. Node.js kullanarak istemci ve sunucu uygulamaları yazmayı öğrenmek için Node.js WebSockets hızlı başlangıcına veya http Node.js hızlı başlangıcına bakın.