Azure IoT Hub hatalarını anlama ve çözme
Bu makalede, IoT Hub kullanırken karşılaşabileceğiniz yaygın hata kodlarının nedenleri ve çözümleri açıklanmaktadır.
400027 Bağlan ion yeni bağlantıda zorla kapatıldı
Cihazınızın bağlantısı kesilirse ve .NET SDK ve MQTT aktarım türünü kullanarak Bağlan ionStatusChangeReason olarak Communication_Error bildirirse 400027 Bağlan ionForcefullyClosedOnNew Bağlan ion hatasını görebilirsiniz. Ya da cihazdan buluta ikiz işleminiz (okuma veya düzeltme eki ile bildirilen özellikler gibi) veya doğrudan yöntem çağırma işlemi 400027 hata koduyla başarısız olur.
Bu hata, başka bir istemci aynı kimliği kullanarak IoT Hub'a yeni bir bağlantı oluşturduğunda oluşur, bu nedenle IoT Hub önceki bağlantıyı kapatır. IoT Hub'ı birden fazla istemcinin aynı kimliği kullanarak bağlanmasına izin vermez.
Bu hatayı çözmek için her istemcinin kendi kimliğini kullanarak IoT Hub'a bağlandığından emin olun.
IoT Hub'ı yetkisiz 401003
Günlüklerde, 401003 IoTHubUnauthorized ile bağlantıyı kesen ve ardından device Bağlan ionClosedRemotely 404104 ve kısa bir süre sonra başarıyla bağlanan bir cihaz düzeni görebilirsiniz.
Veya IoT Hub istekleri aşağıdaki hata iletilerinden biriyle başarısız olur:
- Yetkilendirme üst bilgisi eksik
- IotHub '*' belirtilen '*' cihazını içermiyor
- Yetkilendirme kuralı '*' '*' için erişime izin vermiyor
- Bu cihaz için kimlik doğrulaması başarısız oldu, belirteci veya sertifikayı yenileyip yeniden bağlanamadı
- Parmak izi yapılandırmayla eşleşmiyor: Parmak izi: SHA1Hash=*, SHA2Hash=*; Yapılandırma: PrimaryThumbprint=*, SecondaryThumbprint=*
- Atanmamış izinler nedeniyle sorumlu user@example.com /exampleOperation üzerinde GET için yetkilendirilmedi
Bu hatanın nedeni, MQTT için bazı SDK'ların SAS belirtecinin ne zaman yenilendiğini bilmek için bağlantı kesilmesini sağlamak için IoT Hub'a güvenmesi nedeniyle oluşur. Dolayısıyla:
- SAS belirtecinin süresi doluyor
- IoT Hub süre sonunu fark eder ve 401003 IoTHubUnauthorized ile cihazın bağlantısını keser
- Cihaz, 404104 Device Bağlan ionClosedRemotely ile bağlantıyı keser
- IoT SDK'sı yeni bir SAS belirteci oluşturur
- Cihaz IoT Hub'a başarıyla yeniden bağlanıyor
Veya IoT Hub kimlik doğrulaması üst bilgisi, kuralı veya anahtarın kimliğini doğrulayamadı. Bunun nedeni, belirtilerde belirtilen nedenlerden herhangi biri olabilir.
Bu hatayı düzeltmek için cihaz bağlantı dizesi kullanarak bağlantı için IoT SDK'sı kullanılıyorsa hiçbir eylem gerekmez. IoT SDK, SAS belirteci süre sonuyla yeniden bağlanmak için yeni belirteci yeniden oluşturur.
Varsayılan belirteç ömrü SDK'lar arasında 60 dakikadır; ancak bazı SDK'lar için belirteç ömrü ve belirteç yenileme eşiği yapılandırılabilir. Buna ek olarak, bir cihaz bağlantı kesildiğinde ve belirteç yenileme sırasında yeniden bağlandığında oluşturulan hatalar her SDK için farklılık gösterir. Daha fazla bilgi edinmek ve cihazınızın günlüklerde hangi SDK'yı kullandığını belirleme hakkında bilgi için bkz . Azure IoT SDK'ları ile MQTT cihazı bağlantı kesme davranışı.
Cihaz geliştiricileri için hata hacmi önemliyse, süre dolmadan önce SAS belirtecini yenileyen C SDK'sına geçin. AMQP için SAS belirteci bağlantı kesilmeden yenilenebilir.
Genel olarak, sunulan hata iletisi hatanın nasıl düzeltileceğini açıklamalıdır. Bazı nedenlerden dolayı hata iletisi ayrıntılarına erişiminiz yoksa şunlardan emin olun:
- Kullandığınız SAS veya diğer güvenlik belirtecinin süresi dolmaz.
- X.509 sertifika kimlik doğrulaması için cihaz sertifikasının veya cihazla ilişkili CA sertifikasının süresi dolmaz. X.509 CA sertifikalarını IoT Hub'a kaydetmeyi öğrenmek için bkz . Öğretici: Test için sertifika oluşturma ve karşıya yükleme.
- X.509 sertifikası parmak izi kimlik doğrulaması için cihaz sertifikasının parmak izi IoT Hub'a kaydedilir.
- Kullandığınız protokol için yetkilendirme kimlik bilgileri iyi biçimlendirilmiş. Daha fazla bilgi edinmek için bkz . IoT Hub'a erişimi denetleme.
- Kullanılan yetkilendirme kuralı, istenen işlem için izinlere sahiptir.
- "Sorumlu..." ile başlayan son hata iletileri için, kullanıcıya doğru Azure RBAC izni düzeyi atanarak bu hata çözülebilir. Örneğin, IoT Hub'ındaki bir Sahip tüm izinleri veren "IoT Hub Veri Sahibi" rolünü atayabilir. İzin eksikliği sorununu çözmek için bu rolü deneyin.
Not
Bazı cihazlarda, cihaz saatinin sunucudan beş dakikadan fazla farkı olduğunda zaman kayma sorunuyla karşılaşılabilir. Bu hata, bir cihaz bir IoT hub'ına haftalarca ve hatta aylar boyunca sorunsuz bir şekilde bağlandığında ancak bağlantısının sürekli reddedilmesine neden olduğunda oluşabilir. Hata ioT hub'ına bağlı cihazların bir alt kümesine de özgü olabilir, çünkü bir cihazın ilk bağlandığı veya açılacağı zamana bağlı olarak zaman kayma farklı hızlarda gerçekleşebilir.
Genellikle, NTP kullanarak bir zaman eşitlemesi gerçekleştirmek veya cihazı yeniden başlatmak (önyükleme sırası sırasında otomatik olarak bir zaman eşitlemesi gerçekleştirebilir) sorunu giderir ve cihazın yeniden bağlanmasına izin verir. Bu hatayı önlemek için, cihazı NTP kullanarak düzenli bir zaman eşitlemesi gerçekleştirecek şekilde yapılandırın. Cihaz deneyimlerinin kayma miktarına bağlı olarak eşitlemeyi günlük, haftalık veya aylık olarak zamanlayabilirsiniz. Cihazınızda düzenli bir NTP eşitlemesi yapılandıramıyorsanız düzenli bir yeniden başlatma zamanlayın.
ioT Hub kotası 403002 aşıldı
IoT Hub isteklerinin IoTHubQuotaExceeded hatasıyla başarısız 403002 görebilirsiniz. Azure portalında IoT hub cihaz listesi yüklenmez.
Bu hata genellikle IoT hub'ı için günlük ileti kotası aşıldığında oluşur. Bu hatayı düzeltmek için:
- IoT hub'ının birim sayısını yükseltin veya artırın ya da günlük kotanın yenilenmesi için sonraki UTC gününü bekleyin.
- İkiz sorguları ve doğrudan yöntemler gibi işlemlerin kotaya nasıl doğru sayıldığından emin olmak için bkz . IoT Hub fiyatlandırmasını anlama.
- Günlük kota kullanımı için izlemeyi ayarlamak için, kullanılan toplam ileti sayısı ölçümünü içeren bir uyarı ayarlayın. Adım adım yönergeler için bkz . IoT Hub ile ölçümleri ve uyarıları ayarlama.
Bu hata, IoT hub'ınıza kayıtlı cihaz sayısı bir IoT hub'ı için kota sınırına yaklaştığında veya sınırı aştığında toplu içeri aktarma işi tarafından da döndürülebilir. Daha fazla bilgi edinmek için bkz . İçeri aktarma işlerinin sorunlarını giderme.
403004 Cihaz en fazla kuyruk derinliği aşıldı
Buluttan cihaza ileti göndermeye çalışırken isteğin 403004 veya DeviceMaximumQueueDepthExceeded hatasıyla başarısız olduğunu görebilirsiniz.
Bu hatanın temel nedeni, cihaz için sıraya alınan ileti sayısının kuyruk sınırını aşmasıdır.
Bu sınırla karşı karşıya olmanın en olası nedeni, iletiyi almak için HTTPS kullanmanızdır ve bu da kullanarak ReceiveAsync
sürekli yoklamalara yol açar ve bu da IoT Hub'ın isteği azaltmasına neden olur.
HTTPS ile buluttan cihaza iletiler için desteklenen desen, iletileri seyrek denetleyan aralıklı olarak bağlı cihazlardır (25 dakikadan az). Kuyruk sınırına geçme olasılığını azaltmak için buluttan cihaza iletiler için AMQP veya MQTT'ye geçin.
Alternatif olarak, kuyruğa alınan iletileri hızlı bir şekilde tamamlamak, reddetmek veya bırakmak, yaşam süresini kısaltmak veya daha az ileti göndermeyi göz önünde bulundurmak için cihaz tarafı mantığını geliştirin. Bkz. C2D iletisi yaşam süresi.
Son olarak, sınıra ulaşılmadan önce bekleyen iletileri düzenli aralıklarla temizlemek için Kuyruk Temizleme API'sini kullanmayı göz önünde bulundurun.
403006 Cihaz etkin dosya karşıya yükleme üst sınırı aşıldı
Dosya yükleme isteğinizin DeviceMaximumActiveFileUploadLimitExceeded 403006 hata koduyla başarısız olduğunu ve "Etkin dosya yükleme isteklerinin sayısı 10'u aşamaz" iletisini görebilirsiniz.
Her cihaz istemcisi eşzamanlı dosya yükleme işlemleri için sınırlı olduğundan bu hata oluşur. Dosya yüklemeleri tamamlandığında cihazınız IoT Hub'a bildirim göndermezse sınırı kolayca aşabilirsiniz. Bu sorun genellikle güvenilir olmayan bir cihaz tarafı ağından kaynaklanır.
Bu hatayı düzeltmek için cihazın IoT Hub dosyasını karşıya yükleme işleminin tamamlandığını hemen bildirediğinden emin olun. Ardından, dosya yükleme yapılandırması için SAS belirteci TTL'sini azaltmayı deneyin.
404001 Cihazı bulunamadı
C2D iletisi, ikiz güncelleştirmesi veya doğrudan yöntem gibi buluttan cihaza (C2D) iletişim sırasında, işlemin DeviceNotFound 404001 hatayla başarısız olduğunu görebilirsiniz.
IoT Hub cihazı bulamadığından işlem başarısız oldu. Cihaz kayıtlı değil veya devre dışı.
Bu hatayı çözmek için kullandığınız cihaz kimliğini kaydedin ve yeniden deneyin.
404103 Cihaz çevrimiçi değil
Cihaz çevrimiçi olsa bile bir cihaza yönelik doğrudan yöntemin DeviceNotOnline 404103 hatasıyla başarısız olduğunu görebilirsiniz.
Cihazın çevrimiçi olduğunu biliyorsanız ve hatayı almaya devam ediyorsanız, doğrudan yöntem geri çağırması cihazda kayıtlı olmadığından büyük olasılıkla hata oluştu.
Cihazınızı doğrudan yöntem geri çağırmaları için doğru şekilde yapılandırmak için bkz . Cihazda doğrudan yöntem işleme.
404104 Cihaz bağlantısı uzaktan kapatıldı
Cihazların düzenli aralıklarla (örneğin 65 dakikada bir) bağlantısının kesildiğini ve IoT Hub kaynak günlüklerinde Device Bağlan ionClosedRemotely 404104 görebilirsiniz. Bazen ioTHubUnauthorized 401003 ve bir dakikadan kısa bir süre sonra başarılı bir cihaz bağlantısı olayı görürsünüz.
Veya cihazların bağlantısı rastgele kesilir ve IoT Hub kaynak günlüklerinde Device Bağlan ionClosedRemotely 404104 görürsünüz.
Çoğu cihazın bağlantısı aynı anda kesildiğinde, Bağlan cihazlar (connectedDeviceCount) ölçümünde bir düşüş görürsünüz ve Azure İzleyici Günlüklerinde her zamankinden daha fazla cihaz Bağlan ionClosedRemotely ve 500xxx İç hataları 404104.
IoT Hub'a bağlanmak için kullanılan SAS belirtecinin süresinin dolması nedeniyle bu hata oluşabilir ve bu da IoT Hub'ın cihazın bağlantısını kesmesine neden olur. Belirteç cihaz tarafından yenilendiğinde bağlantı yeniden kurulur. Örneğin, C SDK'sı için SAS belirtecinin süresi varsayılan olarak saatte bir dolar ve bu da normal bağlantı kesilmesine neden olabilir. Daha fazla bilgi edinmek için bkz . ioTHubUnauthorized 401003.
Diğer bazı olasılıklar şunlardır:
- Cihaz, MQTT etkin tutma süresinden daha uzun süre temel ağ bağlantısını kaybederek uzak boşta kalma zaman aşımına neden oldu. MQTT canlı tutma ayarı cihaz başına farklı olabilir.
- Cihaz TCP/IP düzeyinde bir sıfırlama gönderdi ancak uygulama düzeyi
MQTT DISCONNECT
göndermedi. Temel olarak, cihaz aniden temel yuva bağlantısını kapattı. Bu sorun bazen Azure IoT SDK'sının eski sürümlerindeki hatalardan kaynaklanır. - Cihaz tarafı uygulaması kilitlendi.
Veya IoT Hub geçici bir sorun yaşıyor olabilir. Bkz. IoT Hub iç sunucu hatası.
Bu hatayı düzeltmek için:
- IoTHubUnauthorized 401003 hata kılavuzuna bakın.
- Bağlantıyı test ederek cihazın IoT Hub'a iyi bir bağlantısı olduğundan emin olun. Ağ güvenilir değilse veya aralıklıysa, algılamanın (örneğin Azure İzleyici uyarıları aracılığıyla) daha uzun sürmesine neden olabileceğinden canlı tutma değerini artırmanızı önermeyiz.
- IoT SDK'larının en son sürümlerini kullanın.
- IoT Hub iç sunucu hataları kılavuzuna bakın.
Bağlantıları güvenilir bir şekilde yönetmek için Azure IoT cihaz SDK'larını kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure IoT Hub cihaz SDK'larını kullanarak bağlantı ve güvenilir mesajlaşma yönetimi
409001 Cihaz zaten var
IoT Hub'a bir cihaz kaydetmeye çalışırken, isteğin DeviceAlreadyExists 409001 hatasıyla başarısız olduğunu görebilirsiniz.
IoT hub'ında aynı cihaz kimliğine sahip bir cihaz zaten olduğundan bu hata oluşur.
Bu hatayı çözmek için farklı bir cihaz kimliği kullanın ve yeniden deneyin.
409002 Bağlantı oluşturma çakışması
Cihaz bağlantısının kesilmesi veya buluttan cihaza ileti hatasıyla birlikte günlüklerde LinkCreationConflict 409002 hatasını görebilirsiniz.
Bu hata genellikle IoT Hub bir istemcinin birden fazla bağlantısı olduğunu algıladığında oluşur. Aslında, mevcut bir bağlantıya sahip bir cihaz için yeni bir bağlantı isteği geldiğinde, IoT Hub mevcut bağlantıyı bu hatayla kapatır.
En yaygın durumda, ayrı bir sorun (404104 Device Bağlan ionClosedRemotely gibi) cihazın bağlantısının kesilmesine neden olur. Cihaz bağlantıyı hemen yeniden kurmaya çalışır, ancak IoT Hub yine de cihazın bağlı olduğunu düşünür. IoT Hub önceki bağlantıyı kapatır ve bu hatayı günlüğe kaydeder.
Ya da hatalı cihaz tarafı mantığı, zaten açık olan cihazın bağlantı kurmasına neden olur.
Bu hatayı çözmek için günlüklerde giderebileceğiniz diğer hataları arayın çünkü bu hata genellikle farklı, geçici bir sorunun yan etkisi olarak görünür. Aksi takdirde, yalnızca bağlantı bırakıldığında yeni bir bağlantı isteği göndermeyi unutmayın.
412002 Cihaz ileti kilidi kayboldu
Buluttan cihaza ileti göndermeye çalışırken, isteğin DeviceMessageLockLost 412002 hatasıyla başarısız olduğunu görebilirsiniz.
Bu hata, bir cihaz kuyruktan buluttan cihaza bir ileti aldığında (örneğin, kullanarak ReceiveAsync()
) iletinin IoT Hub tarafından bir dakikalık bir kilitleme zaman aşımı süresi boyunca kilitlenmesi nedeniyle oluşur. Cihaz, kilit zaman aşımı süresi dolduktan sonra iletiyi tamamlamaya çalışırsa IoT Hub bu özel durumu oluşturur.
IoT Hub bir dakikalık kilit zaman aşımı süresi içinde bildirimi almazsa, iletiyi yeniden Sıralı durumuna ayarlar. Cihaz iletiyi yeniden almayı deneyebilir. Hatanın gelecekte oluşmasını önlemek için, iletiyi aldıktan sonraki bir dakika içinde iletiyi tamamlamak için cihaz tarafı mantığı uygulayın. Bu bir dakikalık zaman aşımı değiştirilemez.
429001 Azaltma özel durumu
IoT Hub'a yönelik isteklerinizin ThrottlingException 429001 hatasıyla başarısız olduğunu görebilirsiniz.
İstenen işlem için IoT Hub azaltma sınırları aşıldığında bu hata oluşur.
Bu hatayı çözmek için, Telemetri iletisi gönderme denemeleri ölçümünüzü yukarıda belirtilen sınırlarla karşılaştırarak azaltma sınırına ulaşıp ulaşmadığını denetleyin. Ayrıca Azaltma hataları sayısı ölçümünü de de de kontrol edebilirsiniz. Bu ölçümler hakkında bilgi için bkz . Cihaz telemetrisi ölçümleri. IoT hub'ınızı izlemenize yardımcı olacak ölçümleri kullanma hakkında bilgi için bkz . IoT Hub'ını izleme.
IoT Hub yalnızca sınır uzun bir süre ihlal edildikten sonra 429 ThrottlingException döndürür. Bu işlem, IoT hub'ınız trafik yoğunluğuyla karşılaşıyorsa iletilerinizin bırakılmaması için yapılır. IoT Hub bu süre boyunca iletileri işlem kısıtlama hızında işlemeye devam eder ve kapsamda çok fazla trafik olması halinde bu hız düşük olabilir. Daha fazla bilgi için bkz. IoT Hub trafiği şekillendirme.
Kota veya kısıtlama sınırlarına ulaşıyorsanız IoT Hub ölçeğini artırmayı deneyin.
500xxx Dahili hatalar
IoT Hub isteğinizin 500 ve/veya bir tür "sunucu hatası" ile başlayan bir hatayla başarısız olduğunu görebilirsiniz. Bazı olasılıklar şunlardır:
500001 ServerError: IoT Hub sunucu tarafı bir sorunla karşılaştı.
500008 GenericTimeout: IoT Hub zaman aşımına uğramadan önce bağlantı isteğini tamamlayamadı.
ServiceUnavailable (hata kodu yok):IoT Hub bir iç hatayla karşılaştı.
InternalServerError (hata kodu yok): IoT Hub bir iç hatayla karşılaştı.
500xxx hata yanıtının birçok nedeni olabilir. Her durumda, sorun büyük olasılıkla geçicidir. IoT Hub ekibi SLA'yı korumak için çok çalışsa da, IoT Hub düğümlerinin küçük alt kümeleri zaman zaman geçici hatalarla karşılaşabilir. Cihazınız sorun yaşayan bir düğüme bağlanmaya çalıştığında bu hatayı alırsınız.
500xxx hatalarını azaltmak için cihazdan yeniden deneyin. Yeniden denemeleri otomatik olarak yönetmek için Azure IoT SDK'larının en son sürümünü kullandığınızdan emin olun. Geçici hata işleme ve yeniden denemeler hakkında en iyi uygulama için bkz . Geçici hata işleme.
Sorun devam ederse ioT Hub'da bilinen bir sorun olup olmadığını görmek için Kaynak Durumu ve Azure Durumu'nu denetleyin. El ile yük devretme özelliğini de kullanabilirsiniz.
Bilinen bir sorun yoksa ve sorun devam ederse, daha fazla araştırma için desteğe başvurun.
503003 Bölümü bulunamadı
IoT Hub'a yönelik isteklerin PartitionNotFound 503003 hatasıyla başarısız olduğunu görebilirsiniz.
Bu hata IoT Hub'ın iç hatasıdır ve büyük olasılıkla geçicidir. Bkz. IoT Hub iç sunucu hataları.
Bu hatayı çözmek için bkz . IoT Hub iç sunucu hataları.
504101 Ağ Geçidi zaman aşımı
IoT Hub'dan bir cihaza doğrudan yöntem çağırmaya çalışırken isteğin GatewayTimeout 504101 hatasıyla başarısız olduğunu görebilirsiniz.
IoT Hub bir hatayla karşılaştığından ve zaman aşımına uğramadan önce doğrudan yöntemin tamamlanıp tamamlanmadığı doğrulanamadığından bu hata oluşur. Ya da Azure IoT C# SDK'sının (<1.19.0) önceki bir sürümünü kullanırken, bir hata nedeniyle cihaz ile IoT Hub arasındaki AMQP bağlantısı sessizce bırakılabilir.
Bu hatayı çözmek için yeniden deneyin veya Azure IOT C# SDK'sının en son sürümüne yükseltin.