Bagikan melalui


Mulai permintaan HTTP Relay Hybrid Connections di .NET

Dalam mulai cepat ini, Anda membuat aplikasi pengirim dan penerima .NET yang mengirimkan dan menerima pesan dengan menggunakan protokol HTTP. Aplikasi ini menggunakan fitur Relay Hybrid Connections dari Azure Relay. Untuk mempelajari tentang Azure Relay secara umum, lihat Azure Relay.

Dalam mulai cepat ini, Anda melakukan langkah-langkah berikut:

  1. Buat namespace Relay dengan menggunakan portal Azure.
  2. Buat koneksi hibrida di namespace tersebut dengan menggunakan portal Azure.
  3. Tulis aplikasi konsol server (listener) untuk menerima pesan.
  4. Tulis aplikasi konsol klien (pengirim) untuk mengirim pesan.
  5. Jalankan aplikasi.

Prasyarat

Untuk menyelesaikan tutorial ini, Anda memerlukan prasyarat berikut:

  • Visual Studio 2019 atau versi yang lebih baru. Contoh dalam tutorial ini menggunakan Visual Studio 2022.
  • Langganan Azure. Jika Anda tidak memilikinya, buat akun gratis sebelum memulai.

Membuat namespace

  1. Masuk ke portal Azure.

  2. Pilih Semua layanan di menu sebelah kiri. Pilih Integrasi, cari Relay, gerakkan mouse di atas Relay, lalu pilih Buat.

    Cuplikan layar memperlihatkan pilihan tombol Relay -> Buat.

  3. Pada halaman Buat namespace layanan, ikuti langkah-langkah berikut:

    1. Pilih langganan Azure untuk membuat namespace.

    2. Untuk Grup sumber daya, pilih grup sumber daya yang ada tempat namespace akan aktif, atau buat grup baru.

    3. Masukkan nama untuk namespace Relay.

    4. Pilih wilayah tempat namespace layanan Anda harus dihosting.

    5. Pilih Tinjau + buat di bagian bawah halaman.

      Cuplikan layar memperlihatkan halaman Buat namespace layanan.

    6. Pada halaman Tinjau + buat, pilih Buat.

    7. Setelah beberapa menit, Anda akan melihat halaman Relay untuk namespace.

      Cuplikan layar memperlihatkan halaman beranda untuk namespace Relay.

Mendapatkan info masuk manajemen

  1. Pada halaman Relay , pilih Kebijakan akses bersama di menu sebelah kiri. `

  2. Pada halaman Kebijakan akses bersama, pilih RootManageSharedAccessKey.

  3. Di bawah Kebijakan SAS: RootManageSharedAccessKey, pilih tombol Salin di sebelah String Koneksi Primer. Tindakan ini menyalin string koneksi ke clipboard untuk digunakan nanti. Tempelkan nilai ini ke Notepad atau beberapa lokasi sementara lainnya.

  4. Ulangi langkah sebelumnya untuk menyalin dan menempelkan nilai Kunci primer ke lokasi sementara untuk digunakan nanti.

    Cuplikan layar memperlihatkan info koneksi untuk namespace Relay.

Buat koneksi hibrid

Pada halaman Relay untuk namespace Anda, ikuti langkah-langkah ini untuk membuat koneksi hibrid.

  1. Di menu sebelah kiri, Di bawah Entitas, pilih Koneksi Hibrid, lalu pilih + Koneksi Hibrid.

    Cuplikan layar memperlihatkan halaman Koneksi Hibrid.

  2. Pada halaman Buat Koneksi Hibrid, masukkan nama untuk koneksi hibrid, dan pilih Buat.

    Cuplikan layar memperlihatkan halaman Buat Koneksi Hibrid.

Membuat aplikasi server (pendengar)

Di Visual Studio, tulis aplikasi konsol C# untuk mendengarkan dan menerima pesan dari relay.

Membuat aplikasi konsol lokal

Di Visual Studio, buat proyek Aplikasi Konsol (.NET Framework) baru.

Menambahkan paket Relay NuGet

  1. Klik kanan proyek yang baru dibuat, lalu pilih Kelola Paket NuGet.
  2. Pilih Telusuri, lalu cari Microsoft.Azure.Relay. Di hasil pencarian, pilih Microsoft Azure Relay.
  3. Pilih Instal untuk menyelesaikan penginstalan. Tutup kotak dialog.

Menulis kode untuk menerima pesan

  1. Di bagian atas file Program.cs, ganti pernyataan using yang ada dengan pernyataan using berikut:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.Relay;
    using System.Net;
    
  2. Tambahkan konstanta ke kelas Program untuk detail koneksi hibrid. Ganti tempat penampung dalam tanda kurung siku dengan nilai yang Anda peroleh saat membuat koneksi hibrid. Pastikan untuk menggunakan nama namespace layanan yang sepenuhnya memenuhi syarat.

    // 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. Tambahkan metode RunAsync ke kelas Program:

    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. Tambahkan baris kode berikut ke metode Main dalam kelas Program:

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

    File Program.cs yang telah selesai akan terlihat seperti ini:

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

Membuat aplikasi klien (pengirim)

Untuk mengirim pesan ke antrean, tulis aplikasi konsol C# menggunakan Visual Studio.

Membuat aplikasi konsol lokal

Jika Anda menonaktifkan opsi "Memerlukan Otorisasi Klien" saat membuat Relay, Anda dapat mengirim permintaan ke URL Koneksi Hibrid dengan browser apa pun. Untuk mengakses titik akhir yang dilindungi, Anda perlu membuat dan meneruskan token di header ServiceBusAuthorization, yang ditampilkan di sini.

Di Visual Studio, buat proyek Aplikasi Konsol (.NET Framework) baru.

Menambahkan paket Relay NuGet

  1. Klik kanan proyek yang baru dibuat, lalu pilih Kelola Paket NuGet.
  2. Pilih opsi Sertakan pra-rilis.
  3. Pilih Telusuri, lalu cari Microsoft.Azure.Relay. Di hasil pencarian, pilih Microsoft Azure Relay.
  4. Pilih Instal untuk menyelesaikan penginstalan. Tutup kotak dialog.

Menulis kode untuk mengirim permintaan

  1. Di bagian atas file Program.cs, ganti pernyataan using yang ada dengan pernyataan using berikut:

    using System;
    using System.IO;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Net.Http;
    using Microsoft.Azure.Relay;
    
  2. Tambahkan konstanta ke kelas Program untuk detail koneksi hibrid. Ganti tempat penampung dalam tanda kurung siku dengan nilai yang Anda peroleh saat membuat koneksi hibrid. Pastikan untuk menggunakan nama namespace layanan yang sepenuhnya memenuhi syarat.

    // 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. Tambahkan metode berikut ke kelas 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();
    }
    
  4. Tambahkan baris kode berikut ke metode Main dalam kelas Program.

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

    Seperti inilah harusnya tampilan Program.cs:

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

Catatan

Kode sampel dalam artikel ini menggunakan string koneksi untuk mengautentikasi ke namespace Azure Relay agar tutorial tetap sederhana. Kami menyarankan agar Anda menggunakan autentikasi ID Microsoft Entra di lingkungan produksi, daripada menggunakan string koneksi atau tanda tangan akses bersama, yang dapat lebih mudah disusupi. Untuk informasi terperinci dan kode sampel untuk menggunakan autentikasi ID Microsoft Entra, lihat Mengautentikasi dan mengotorisasi aplikasi dengan ID Microsoft Entra untuk mengakses entitas Azure Relay dan Mengautentikasi identitas terkelola dengan ID Microsoft Entra untuk mengakses sumber daya Azure Relay.

Menjalankan aplikasi

  1. Jalankan aplikasi server. Anda akan melihat teks berikut di jendela konsol:

    Online
    Server listening
    
  2. Jalankan aplikasi klien. Anda melihat hello! di jendela klien. Klien mengirim permintaan HTTP ke server, dan server merespons dengan hello!.

  3. Sekarang, untuk menutup jendela konsol, tekan ENTER di kedua jendela konsol.

Selamat, Anda telah membuat aplikasi Hybrid Connections lengkap!

Langkah berikutnya

Dalam mulai cepat ini, Anda membuat aplikasi klien dan server .NET yang menggunakan HTTP untuk mengirimkan dan menerima pesan. Fitur Koneksi Hibrid Azure Relay juga mendukung penggunaan WebSocket untuk mengirim dan menerima pesan. Untuk mempelajari cara menggunakan WebSocket dengan Sambungan Hibrid Azure Relay, lihat mulai cepat WebSocket.

Dalam mulai cepat ini, Anda menggunakan .NET Framework untuk membuat aplikasi klien dan server. Untuk mempelajari cara menulis aplikasi klien dan server menggunakan Node.js, lihat panduan mulai cepat Node.js WebSockets atau panduan cepat HTTP Node.js.