All Products
Search
Document Center

IoT Platform:Hubungkan klien ke IoT Platform menggunakan SDK untuk .NET

Last Updated:Jun 17, 2026

Gunakan .NET SDK untuk menghubungkan klien AMQP ke Alibaba Cloud IoT Platform dan menerima pesan langganan sisi server.

Prasyarat

Anda telah memperoleh ID kelompok konsumen dan berlangganan ke pesan topik yang diperlukan.

Lingkungan pengembangan

Tabel berikut mencantumkan framework dan versi yang didukung.

Framework

Versi yang didukung

.NET Framework

3.5, 4.0, 4.5, atau yang lebih baru

.NET Micro Framework

4.2 atau yang lebih baru

.NET nanoFramework

1.0 atau yang lebih baru

.NET Compact Framework

3.9 atau yang lebih baru

.Net Core pada Windows 10 dan Ubuntu 14.04

1.0 atau yang lebih baru

Mono

4.2.1 atau yang lebih baru

Unduh SDK

Kami merekomendasikan pustaka AMQP.Net Lite. Untuk mengunduh pustaka dan melihat instruksinya, kunjungi AMQP.Net Lite.

Tambahkan dependensi

Tambahkan dependensi berikut ke file packages.config:

<packages>
  <package id="AMQPNetLite" version="2.2.0" targetFramework="net47" />
</packages>

Kode contoh

using System;
using System.Text;
using Amqp;
using Amqp.Sasl;
using Amqp.Framing;
using System.Threading;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using System.Security.Cryptography;
namespace amqp
{
    class MainClass
    {
        // Titik akhir. Untuk informasi selengkapnya, lihat Hubungkan klien AMQP ke IoT Platform.
        static string Host = "${YourHost}";
        static int Port = 5671;
        // Menyimpan ID AccessKey dan Rahasia AccessKey secara langsung dalam kode menimbulkan risiko keamanan. Kami menyarankan agar Anda menggunakan Variabel lingkungan untuk menyimpan kredensial Anda. Contoh ini menunjukkan cara mengambil ID AccessKey dan Rahasia AccessKey dari Variabel lingkungan.
        static string AccessKey = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
        static string AccessSecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        static string consumerGroupId = "${YourConsumerGroupId}";
        static string clientId = "${YourClientId}";
        // ID instans.
        static string iotInstanceId = "${YourIotInstanceId}"; 
        static int Count = 0;
        static int IntervalTime = 10000;
        static Address address;
        public static void Main(string[] args)
        {
            long timestamp = GetCurrentMilliseconds();
            string param = "authId=" + AccessKey + "&timestamp=" + timestamp;
            // Untuk informasi tentang cara menyusun parameter userName, lihat Hubungkan klien AMQP ke IoT Platform.
            string userName = clientId + "|authMode=aksign,signMethod=hmacmd5,consumerGroupId=" + consumerGroupId
               + ",iotInstanceId=" + iotInstanceId + ",authId=" + AccessKey + ",timestamp=" + timestamp + "|";
            // Hitung signature. Untuk informasi tentang cara menyusun password, lihat Hubungkan klien AMQP ke IoT Platform.
            string password = doSign(param, AccessSecret, "HmacMD5");
            DoConnectAmqp(userName, password);
            ManualResetEvent resetEvent = new ManualResetEvent(false);
            resetEvent.WaitOne();
        }
        static void DoConnectAmqp(string userName, string password)
        {
            address = new Address(Host, Port, userName, password);
            // Buat koneksi.
            ConnectionFactory cf = new ConnectionFactory();
            // Opsional: Gunakan sertifikat TLS lokal.
            //cf.SSL.ClientCertificates.Add(GetCert());
            //cf.SSL.RemoteCertificateValidationCallback = ValidateServerCertificate;
            cf.SASL.Profile = SaslProfile.External;
            cf.AMQP.IdleTimeout = 120000;
            // Sesuaikan parameter cf.AMQP.ContainerId dan cf.AMQP.HostName.
            cf.AMQP.ContainerId = "client.1.2"; 
            cf.AMQP.HostName = "contoso.com";
            cf.AMQP.MaxFrameSize = 8 * 1024;
            var connection = cf.CreateAsync(address).Result;
            // Daftarkan callback untuk menangani penutupan koneksi.
            connection.AddClosedCallback(ConnClosed);
            // Terima pesan.
            DoReceive(connection);
        }
        static void DoReceive(Connection connection)
        {
            // Buat session.
            var session = new Session(connection);
            // Buat receiver link untuk menerima pesan.
            var receiver = new ReceiverLink(session, "queueName", null);
            receiver.Start(20, (link, message) =>
            {
                object messageId = message.ApplicationProperties["messageId"];
                object topic = message.ApplicationProperties["topic"];
                string body = Encoding.UTF8.GetString((Byte[])message.Body);
                // Catatan: Hindari tugas berdurasi panjang dalam callback ini. Jika Anda perlu menjalankan logika bisnis, jalankan di thread terpisah. Hal ini mencegah konsumen diblokir, yang dapat menyebabkan pengiriman ulang pesan.
                Console.WriteLine("receive message, topic=" + topic + ", messageId=" + messageId + ", body=" + body);
                // Akui pesan tersebut.
                link.Accept(message);
            });
        }
        // Jika terjadi error koneksi, klien akan mencoba menghubungkan ulang.
        // Ini adalah contoh retry sederhana. Untuk lingkungan produksi, pertimbangkan untuk menerapkan strategi penghubungan ulang yang lebih andal, seperti exponential backoff.
        static void ConnClosed(IAmqpObject _, Error e)
        {
            Console.WriteLine("An error occurred: " + e);
            if(Count < 3)
            {
                Count += 1;
                Thread.Sleep(IntervalTime * Count);
            }
            else
            {
                Thread.Sleep(120000);
            }
            // Hubungkan ulang.
            DoConnectAmqp(address.User, address.Password);
        }
        static X509Certificate GetCert()
        {
            string certPath = Environment.CurrentDirectory + "/root.crt";
            X509Certificate crt = new X509Certificate(certPath);
            return crt;
        }
        static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }
        static long GetCurrentMilliseconds()
        {
            DateTime dt1970 = new DateTime(1970, 1, 1);
            DateTime current = DateTime.Now;
            return (long)(current - dt1970).TotalMilliseconds;
        }
        // Metode signature. Algoritma yang didukung: hmacmd5, hmacsha1, dan hmacsha256.
        static string doSign(string param, string accessSecret, string signMethod)
        {
            //signMethod = HmacMD5
            byte[] key = Encoding.UTF8.GetBytes(accessSecret);
            byte[] signContent = Encoding.UTF8.GetBytes(param);
            var hmac = new HMACMD5(key);
            byte[] hashBytes = hmac.ComputeHash(signContent);
            return Convert.ToBase64String(hashBytes);
        }
    }
}

Konfigurasikan parameter dalam kode di atas sesuai penjelasan pada tabel berikut. Untuk informasi selengkapnya, lihat Hubungkan klien AMQP ke IoT Platform.

Penting

Tentukan nilai parameter yang valid. Jika tidak, klien AMQP gagal terhubung ke IoT Platform.

Parameter

Deskripsi

Host

Titik akhir koneksi AMQP.

Untuk informasi selengkapnya tentang titik akhir yang dapat Anda tentukan untuk variabel ${YourHost}, lihat Kelola titik akhir instans.

AccessKey

Login ke Konsol IoT Platform, arahkan kursor ke ikon profil di pojok kanan atas, lalu klik AccessKey Management untuk memperoleh ID AccessKey dan Rahasia AccessKey.

Catatan

Jika Anda menggunakan Pengguna RAM, Anda harus menyambungkan kebijakan AliyunIOTFullAccess ke Pengguna RAM tersebut untuk memberikan izin mengelola sumber daya IoT Platform. Jika tidak, koneksi akan gagal. Untuk informasi selengkapnya, lihat Akses IoT Platform sebagai Pengguna RAM.

AccessSecret

consumerGroupId

ID kelompok konsumen dalam instans IoT Platform.

Login ke Konsol IoT Platform. Di instans yang sesuai, buka Message Forwarding > Server-side Subscription > Consumer Group List untuk melihat ID kelompok konsumen Anda.

iotInstanceId

ID instans. Anda dapat menemukan nilai ini di tab Overview di Konsol IoT Platform.

  • Jika ID instans ditampilkan, atur parameter ini ke ID instans tersebut.

  • Jika tab Overview tidak ditampilkan atau instans Anda tidak memiliki ID, biarkan parameter ini kosong dalam format iotInstanceId = "".

clientId

ID klien. Anda harus menentukan ID ini sendiri. Panjang ID maksimal 64 karakter. Kami menyarankan agar Anda menggunakan pengidentifikasi unik, seperti UUID, alamat MAC, atau alamat IP server tempat klien AMQP Anda berada.

Setelah klien AMQP terhubung dan mulai berjalan, login ke Konsol IoT Platform. Di tab Consumer Groups pada halaman Message Forwarding > > > Server-side Subscription untuk instans tersebut, klik View di sebelah kelompok konsumen. Halaman Consumer Group Details akan menampilkan parameter ini. Hal ini membantu Anda mengidentifikasi klien yang berbeda.

Hasil contoh

  • Berhasil: Output berikut menunjukkan koneksi berhasil dan penerimaan pesan.

    receive message, topic=/xxx/xxx/thing/event/property/post, messageId=xxx, body={"deviceType":"xxx","iotId":"xxx","requestId":"xxx","checkFailedData":{},"productKey":"xxx"}
    receive message, topic=/xxx/xxx/thing/event/property/post, messageId=xxx, body={"deviceType":"xxx","iotId":"xxx","requestId":"xxx","checkFailedData":{},"productKey":"xxx"}
    receive message, topic=/xxx/xxx/thing/event/property/post, messageId=xxx, body={"deviceType":"xxx","iotId":"xxx","requestId":"xxx","checkFailedData":{},"productKey":"xxx"}

    Parameter

    Contoh

    Deskripsi

    topic

    /***********/******/thing/event/property/post

    Topik untuk mengirimkan properti perangkat.

    messageId

    2**************7

    ID pesan.

    body

    {"deviceType":"CustomCategory","iotId":"4EwuVV*","requestId":"161268*","checkFailedData":{},"productKey":"g4***S","gmtCreate":1612682173249,"deviceName":"Esensor","items":{"temperature":{"value":-1,"time":1612682173247},"humidity":{"value":74,"time":1612682173247}}}

    Isi pesan.

  • Gagal: Output berikut menunjukkan koneksi gagal.

    Thread xxx has exited with code 0 (0x0).
    Exception thrown: xxx (in xxx L)
    An unhandled exception of type 'Sys xxx n' occurred in m xxx 11
    One or more errors occurred.

Referensi

Untuk informasi selengkapnya tentang kode kesalahan pesan langganan sisi server, lihat Kode kesalahan terkait pesan.