İşleri zamanlama ve yayınlama (.NET)
Milyonlarca cihazı güncelleştiren işleri zamanlamak ve izlemek için Azure IoT Hub'ı kullanın. İşleri kullanarak:
İstenen özellikleri güncelleştirme
Etiketleri güncelleştirme
Doğrudan yöntemleri çağırma
bir iş bu eylemlerden birini sarmalar ve yürütmeyi bir cihaz ikizi sorgusu tarafından tanımlanan bir cihaz kümesine göre izler. Örneğin arka uç uygulaması, cihazları yeniden başlatan 10.000 cihazda doğrudan yöntem çağırmak için bir iş kullanabilir. Cihaz ikizi sorgusuyla cihaz kümesini belirtir ve işi gelecekteki bir zamanda çalışacak şekilde zamanlarsınız. İş, cihazların her biri yeniden başlatma doğrudan yöntemini alıp yürütürken ilerleme durumunu izler.
Bu özelliklerin her biri hakkında daha fazla bilgi edinmek için bkz:
Cihaz ikizi ve özellikleri: Cihaz ikizlerini kullanmaya başlama ve IoT Hub'da cihaz ikizlerini anlama ve kullanma
Doğrudan yöntemler: IoT Hub geliştirici kılavuzu - doğrudan yöntemler
Not
Bu makalede açıklanan özellikler yalnızca IoT Hub'ın standart katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. Çözümünüz için doğru IoT Hub katmanını seçme.
Bu makalede iki .NET (C#) konsol uygulamasının nasıl oluşturulacağı gösterilmektedir:
Arka uç uygulaması tarafından çağrılabilen LockDoor adlı doğrudan bir yöntem uygulayan SimulateDeviceMethods cihaz uygulaması.
İki iş oluşturan bir arka uç uygulaması olan ScheduleJob. Bir iş lockDoor doğrudan yöntemini çağırır ve başka bir iş de istenen özellik güncelleştirmelerini birden çok cihaza gönderir.
Not
Hem cihaz hem de arka uç uygulamaları oluşturmak için kullanılabilen SDK araçları hakkında daha fazla bilgi için bkz . Azure IoT SDK'ları .
Önkoşullar
Visual Studio.
Azure aboneliğinizde bir IoT hub'ı. Henüz bir hub'ına sahip değilseniz IoT hub'ı oluşturma makalesindeki adımları izleyebilirsiniz.
IoT hub'ınıza kayıtlı bir cihaz. IoT hub'ınızda bir cihaz yoksa Cihazı kaydetme bölümünde yer alan adımları izleyin.
Güvenlik duvarınızda 8883 numaralı bağlantı noktasının açık olduğundan emin olun. Bu makaledeki cihaz örneği, 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokollerini kullanır. Bu bağlantı noktası bazı kurumsal ve eğitim ağı ortamlarında engellenebilir. Bu sorunu çözmenin daha fazla bilgi ve yolları için bkz . IoT Hub'a (MQTT) Bağlanma.
Sanal cihaz uygulaması oluşturma
Bu bölümde, çözüm arka ucu tarafından çağrılan doğrudan bir yönteme yanıt veren bir .NET konsol uygulaması oluşturacaksınız.
Önemli
Bu makale, simetrik anahtar kimlik doğrulaması olarak da adlandırılan paylaşılan erişim imzasını kullanarak bir cihazı bağlama adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak X.509 sertifikalarını kullanarak bir cihazın kimliğini doğrulamak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bağlantı güvenliği.
Visual Studio'da Yeni proje oluştur'u ve ardından Konsol Uygulaması (.NET Framework) proje şablonunu seçin. Devam etmek için İleri'yi seçin.
Yeni projenizi yapılandırın bölümünde projeyi SimulateDeviceMethods olarak adlandırın ve İleri'yi seçin.
.NET Framework'ün varsayılan sürümünü kabul edin ve oluştur'u seçerek projeyi oluşturun.
Çözüm Gezgini'da SimulateDeviceMethods projesine sağ tıklayın ve NuGet Paketlerini Yönet'i seçin.
NuGet Paket Yöneticisi Gözat'ı seçin ve Microsoft.Azure.Devices.Client için arama yapın ve seçin. Yükle'yi seçin.
Bu adım Azure IoT cihaz SDK'sı NuGet paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler.
Aşağıdaki
using
deyimlerini Program.cs dosyasının en üst kısmına ekleyin:using Microsoft.Azure.Devices.Client; using Microsoft.Azure.Devices.Shared; using Newtonsoft.Json; using System.Threading.Tasks; using System.Text;
Program sınıfına aşağıdaki alanları ekleyin. Yer tutucu değerini, önceki bölümde not ettiğiniz cihaz bağlantı dizesi değiştirin:
static string DeviceConnectionString = "<yourDeviceConnectionString>"; static DeviceClient Client = null;
Cihazda doğrudan yöntemi uygulamak için aşağıdaki kodu ekleyin:
static Task<MethodResponse> LockDoor(MethodRequest methodRequest, object userContext) { Console.WriteLine(); Console.WriteLine("Locking Door!"); Console.WriteLine("\nReturning response for method {0}", methodRequest.Name); string result = "'Door was locked.'"; return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200)); }
Cihazda cihaz ikizleri dinleyicisini uygulamak için aşağıdaki yöntemi ekleyin:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext) { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); }
Son olarak, Aşağıdaki kodu Main yöntemine ekleyerek IoT hub'ınıza bağlantıyı açın ve yöntem dinleyicisini başlatın:
try { Console.WriteLine("Connecting to hub"); Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Mqtt); Client.SetMethodHandlerAsync("LockDoor", LockDoor, null); Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null); Console.WriteLine("Waiting for direct method call and device twin update\n Press enter to exit."); Console.ReadLine(); Console.WriteLine("Exiting..."); Client.SetMethodHandlerAsync("LockDoor", null, null); Client.CloseAsync().Wait(); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); }
Çalışmanızı kaydedin ve çözümünüzü oluşturun.
Not
İşleri basit tutmak için bu makalede yeniden deneme ilkeleri uygulanmaz. Üretim kodunda, Geçici hata işlemede önerilen yeniden deneme ilkelerini (bağlantı yeniden denemesi gibi) uygulamanız gerekir.
IoT hub'ını bağlantı dizesi alma
Bu makalede, bir cihazda doğrudan yöntem çağırmak için bir iş zamanlayan, cihaz ikizini güncelleştirmek için bir iş zamanlayan ve her işin ilerleme durumunu izleyen bir arka uç hizmeti oluşturacaksınız. Bu işlemleri gerçekleştirmek için hizmetinizin kayıt defteri okuma ve kayıt defteri yazma izinlerine sahip olması gerekir. Varsayılan olarak, her IoT hub'ı bu izinleri veren registryReadWrite adlı bir paylaşılan erişim ilkesiyle oluşturulur.
registryReadWrite ilkesine yönelik IoT Hub bağlantı dizesi almak için şu adımları izleyin:
Azure portalında Kaynak grupları'nı seçin. Hub'ınızın bulunduğu kaynak grubunu seçin ve ardından kaynak listesinden hub'ınızı seçin.
Hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.
İlke listesinden registryReadWrite ilkesini seçin.
Birincil bağlantı dizesi kopyalayın ve değeri kaydedin.
IoT Hub paylaşılan erişim ilkeleri ve izinleri hakkında daha fazla bilgi için bkz . Erişim denetimi ve izinleri.
Önemli
Bu makale, paylaşılan erişim imzası kullanarak hizmete bağlanma adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak Microsoft Entra ID veya yönetilen kimliklerle bir hizmette kimlik doğrulaması yapmak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bulut güvenliği.
Doğrudan yöntem çağırmak ve cihaz ikizi güncelleştirmelerini göndermek için işleri zamanlama
Bu bölümde, LockDoor doğrudan yöntemini çağırmak ve istenen özellik güncelleştirmelerini birden çok cihaza göndermek için işleri kullanan bir .NET konsol uygulaması (C# kullanarak) oluşturacaksınız.
Visual Studio'da Dosya>Yeni Proje'yi> seçin. Yeni proje oluştur bölümünde Konsol Uygulaması (.NET Framework) öğesini ve ardından İleri'yi seçin.
Yeni projenizi yapılandırın bölümünde projeye ScheduleJob adını verin ve Oluştur'u seçin.
.NET Framework'ün varsayılan sürümünü kabul edin ve oluştur'u seçerek projeyi oluşturun.
Çözüm Gezgini ScheduleJob projesine sağ tıklayın ve ardından NuGet Paketlerini Yönet'i seçin.
NuGet Paket Yöneticisi Gözat'ı seçin, Microsoft.Azure.Devices araması yapın ve seçin, ardından Yükle'yi seçin.
Bu adım Azure IoT hizmet SDK'sı NuGet paketini ve bağımlılıklarını indirir, yükler ve bunlara bir başvuru ekler.
Aşağıdaki
using
deyimlerini Program.cs dosyasının en üst kısmına ekleyin:using Microsoft.Azure.Devices; using Microsoft.Azure.Devices.Shared;
Varsayılan deyimlerde zaten yoksa aşağıdaki
using
deyimi ekleyin.using System.Threading; using System.Threading.Tasks;
Program sınıfına aşağıdaki alanları ekleyin. Yer tutucuları daha önce IoT hub'ını alma bağlantı dizesi ve cihazınızın adı bölümünde kopyaladığınız IoT Hub bağlantı dizesi ile değiştirin.
static JobClient jobClient; static string connString = "<yourIotHubConnectionString>"; static string deviceId = "<yourDeviceId>";
Program sınıfına aşağıdaki yöntemi ekleyin:
public static async Task MonitorJob(string jobId) { JobResponse result; do { result = await jobClient.GetJobAsync(jobId); Console.WriteLine("Job Status : " + result.Status.ToString()); Thread.Sleep(2000); } while ((result.Status != JobStatus.Completed) && (result.Status != JobStatus.Failed)); }
Program sınıfına aşağıdaki yöntemi ekleyin:
public static async Task StartMethodJob(string jobId) { CloudToDeviceMethod directMethod = new CloudToDeviceMethod("LockDoor", TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5)); JobResponse result = await jobClient.ScheduleDeviceMethodAsync(jobId, $"DeviceId IN ['{deviceId}']", directMethod, DateTime.UtcNow, (long)TimeSpan.FromMinutes(2).TotalSeconds); Console.WriteLine("Started Method Job"); }
Program sınıfına başka bir yöntem ekleyin:
public static async Task StartTwinUpdateJob(string jobId) { Twin twin = new Twin(deviceId); twin.Tags = new TwinCollection(); twin.Tags["Building"] = "43"; twin.Tags["Floor"] = "3"; twin.ETag = "*"; twin.Properties.Desired["LocationUpdate"] = DateTime.UtcNow; JobResponse createJobResponse = jobClient.ScheduleTwinUpdateAsync( jobId, $"DeviceId IN ['{deviceId}']", twin, DateTime.UtcNow, (long)TimeSpan.FromMinutes(2).TotalSeconds).Result; Console.WriteLine("Started Twin Update Job"); }
Not
Sorgu söz dizimi hakkında daha fazla bilgi için bkz . IoT Hub sorgu dili.
Son olarak, Main yöntemine aşağıdaki satırları ekleyin:
Console.WriteLine("Press ENTER to start running jobs."); Console.ReadLine(); jobClient = JobClient.CreateFromConnectionString(connString); string methodJobId = Guid.NewGuid().ToString(); StartMethodJob(methodJobId); MonitorJob(methodJobId).Wait(); Console.WriteLine("Press ENTER to run the next job."); Console.ReadLine(); string twinUpdateJobId = Guid.NewGuid().ToString(); StartTwinUpdateJob(twinUpdateJobId); MonitorJob(twinUpdateJobId).Wait(); Console.WriteLine("Press ENTER to exit."); Console.ReadLine();
Çalışmanızı kaydedin ve çözümünüzü oluşturun.
Uygulamaları çalıştırma
Şimdi uygulamaları çalıştırmaya hazırsınız.
Visual Studio Çözüm Gezgini çözümünüze sağ tıklayın ve ardından Başlangıç Projelerini Ayarla'yı seçin.
Ortak Özellikler>Başlangıç Projesi'ni ve ardından Birden çok başlangıç projesi'ni seçin.
Listenin en üstünde ve ardından
ScheduleJob
öğesinin yer aldığından eminSimulateDeviceMethods
olun. Her iki eylemi de Başlangıç olarak ayarlayın ve Tamam'ı seçin.Başlat'a tıklayarak projeleri çalıştırın veya Hata Ayıkla menüsüne gidin ve Hata Ayıklamayı Başlat'a tıklayın.
Hem cihaz hem de arka uç uygulamalarının çıkışını görürsünüz.
Sonraki adımlar
Bu makalede, doğrudan bir yöntem çalıştırmak ve cihaz ikizinin özelliklerini güncelleştirmek için işleri zamanladıysanız.
IoT Hub ve cihaz yönetimi desenlerini keşfetmeye devam etmek için Raspberry Pi 3 B+ Başvuru Görüntüsünü kullanarak Azure IoT Hub için Cihaz Güncelleştirmesi öğreticisindeki bir görüntüyü güncelleştirin.