البرنامج التعليمي: اختبار مصادقة الشهادة
يمكنك استخدام المثال التالي على تعليمة برمجية في #C لاختبار إمكانية مصادقة شهادتك لجهازك على IoT Hub. لاحظ أنه يجب عليك القيام بما يلي قبل تشغيل التعليمة البرمجية الاختبارية:
- إنشاء جذر CA، أو شهادة CA ثانوية.
- تحميل شهادة CA الخاصة بك إلى IoT Hub الخاص بك.
- إثبات حيازتك لشهادة CA.
- إضافة جهاز إلى IoT Hub الخاص بك.
- إنشاء شهادة جهاز بنفس معرف الجهاز الخاص بجهازك.
هام
تحقق عملية المصادقة من أن جهازك مرتبط باسم IoT Hub الصحيح.
مثال على التعليمة البرمجية
يوضح مثال التعليمة البرمجية التالية كيفية إنشاء تطبيق #C لمحاكاة جهاز X.509 المسجَّل لمركز IoT الخاص بك. يرسل المثال قيم درجة الحرارة والرطوبة من الجهاز المحاكى إلى المركز الخاص بك. في هذا البرنامج التعليمي، سننشئ تطبيق الجهاز فقط. يُترك للقراء كتمرين لإنشاء تطبيق خدمة IoT Hub الذي سيرسل ردودًا على الأحداث التي يرسلها هذا الجهاز المحاكى.
افتح Visual Studio، حدد Create a new project، ثم اختر قالب المشروع Console App (.NET Framework). حدد "Next".
في Configure your new project، قم بتسمية المشروع SimulateX509Device، ثم حدد Create.

في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع SimulateX509Device، ثم حدد Manage NuGet Packages.
في NuGet Package Manager، حدد Browse، وابحث عن واختر Microsoft.Azure.Devices.Client . حدد Install.

تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة Azure IoT device SDK NuGet وتبعياتها.
أدخل التعليمة البرمجية التالية، وقم بتشغيلها:
using System;
using Microsoft.Azure.Devices.Client;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using System.Text;
namespace SimulateX509Device
{
class Program
{
private static int MESSAGE_COUNT = 5;
// Temperature and humidity variables.
private const int TEMPERATURE_THRESHOLD = 30;
private static float temperature;
private static float humidity;
private static Random rnd = new Random();
// Set the device ID to the name (device identifier) of your device.
private static String deviceId = "{your-device-id}";
static async Task SendEvent(DeviceClient deviceClient)
{
string dataBuffer;
Console.WriteLine("Device sending {0} messages to IoTHub...\n", MESSAGE_COUNT);
// Iterate MESSAGE_COUNT times to set randomm termperature and humidity values.
for (int count = 0; count < MESSAGE_COUNT; count++)
{
// Set random values for temperature and humidity.
temperature = rnd.Next(20, 35);
humidity = rnd.Next(60, 80);
dataBuffer = string.Format("{{\"deviceId\":\"{0}\",\"messageId\":{1},\"temperature\":{2},\"humidity\":{3}}}", deviceId, count, temperature, humidity);
Message eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer));
eventMessage.Properties.Add("temperatureAlert", (temperature > TEMPERATURE_THRESHOLD) ? "true" : "false");
Console.WriteLine("\t{0}> Sending message: {1}, Data: [{2}]", DateTime.Now.ToLocalTime(), count, dataBuffer);
// Send to IoT Hub.
await deviceClient.SendEventAsync(eventMessage);
}
}
static void Main(string[] args)
{
try
{
// Create an X.509 certificate object.
var cert = new X509Certificate2(@"{full path to pfx certificate.pfx}", "{your certificate password}");
// Create an authentication object using your X.509 certificate.
var auth = new DeviceAuthenticationWithX509Certificate("{your-device-id}", cert);
// Create the device client.
var deviceClient = DeviceClient.Create("{your-IoT-Hub-name}.azure-devices.net", auth, TransportType.Mqtt);
if (deviceClient == null)
{
Console.WriteLine("Failed to create DeviceClient!");
}
else
{
Console.WriteLine("Successfully created DeviceClient!");
SendEvent(deviceClient).Wait();
}
Console.WriteLine("Exiting...\n");
}
catch (Exception ex)
{
Console.WriteLine("Error in sample: {0}", ex.Message);
}
}
}
}