فهم أخطاء Azure IoT Hub وحلها

توضح هذه المقالة أسباب وحلول رموز الأخطاء الشائعة التي قد تواجهها أثناء استخدام IoT Hub.

400027 ConnectionForcefullyClosedOnNewConnection

قد ترى الخطأ 40027 إذا قطع جهازك الاتصال وأبلغ عن Communication_Error ك ConnectionStatusChangeReason باستخدام نوع نقل .NET SDK وMQTT. أو، تفشل العملية المزدوجة من جهاز إلى سحابة (مثل خصائص القراءة أو التصحيح المبلغ عنها) أو استدعاء الأسلوب المباشر مع رمز الخطأ 400027.

يحدث هذا الخطأ عندما يقوم عميل آخر بإنشاء اتصال جديد ب IoT Hub باستخدام نفس الهوية، لذلك يقوم IoT Hub بإغلاق الاتصال السابق. لا يسمح IoT Hub لأكثر من عميل واحد بالاتصال باستخدام نفس الهوية.

لحل هذا الخطأ، تأكد من اتصال كل عميل ب IoT Hub باستخدام هويته الخاصة.

401003 IoTHubUnauthorized

في السجلات، قد ترى نمطا من الأجهزة قطع الاتصال مع 401003 IoTHubUn المصرح به، متبوعا 404104 DeviceConnectionClosedRemotely، ثم الاتصال بنجاح بعد وقت قصير.

أو، تفشل الطلبات إلى IoT Hub مع إحدى رسائل الخطأ التالية:

  • رأس التخويل مفقود
  • لا يحتوي IotHub '*' على الجهاز المحدد '*'
  • لا تسمح قاعدة التخويل '*' بالوصول إلى '*'
  • فشلت المصادقة لهذا الجهاز، وتجديد الرمز المميز أو الشهادة وإعادة الاتصال
  • لا تتطابق بصمة الإبهام مع التكوين: بصمة الإبهام: SHA1Hash=*، SHA2Hash=*؛ التكوين: PrimaryThumbprint=*, SecondaryThumbprint=*
  • الأساسي user@example.com غير مصرح له ب GET على /exampleOperation بسبب عدم وجود أذونات معينة

يحدث هذا الخطأ لأنه بالنسبة إلى MQTT، تعتمد بعض SDKs على IoT Hub لإصدار قطع الاتصال عند انتهاء صلاحية رمز SAS المميز لمعرفة متى يتم تحديثه. سو

  1. تنتهي صلاحية الرمز المميز SAS
  2. يلاحظ IoT Hub انتهاء الصلاحية، ويفصل الجهاز مع 401003 IoTHubUn المصرح به
  3. يكمل الجهاز قطع الاتصال مع 404104 DeviceConnectionClosedRemotely
  4. ينشئ IoT SDK رمز SAS مميزا جديدا
  5. يعيد الجهاز الاتصال ب IoT Hub بنجاح

أو، تعذر على IoT Hub مصادقة عنوان أو قاعدة أو مفتاح المصادقة. قد يكون هذا بسبب أي من الأسباب المذكورة في الأعراض.

لحل هذا الخطأ، لا يلزم اتخاذ أي إجراء إذا كنت تستخدم IoT SDK للاتصال باستخدام سلسلة اتصال الجهاز. يعيد IoT SDK إنشاء الرمز المميز الجديد لإعادة الاتصال عند انتهاء صلاحية رمز SAS المميز.

عمر الرمز المميز الافتراضي هو 60 دقيقة عبر SDKs؛ ومع ذلك، بالنسبة لبعض SDKs، يكون عمر الرمز المميز وعتبة تجديد الرمز المميز قابلين للتكوين. بالإضافة إلى ذلك، تختلف الأخطاء التي يتم إنشاؤها عند قطع اتصال الجهاز وإعادة الاتصال بتجديد الرمز المميز لكل SDK. لمعرفة المزيد، وللتعرف على معلومات حول كيفية تحديد SDK الذي يستخدمه جهازك في السجلات، راجع سلوك قطع اتصال جهاز MQTT مع Azure IoT SDKs.

بالنسبة لمطوري الأجهزة، إذا كان حجم الأخطاء مصدر قلق، فالتبديل إلى C SDK، الذي يجدد رمز SAS المميز قبل انتهاء الصلاحية. بالنسبة إلى AMQP، يمكن تحديث رمز SAS المميز دون قطع الاتصال.

بشكل عام، يجب أن تشرح رسالة الخطأ المقدمة كيفية إصلاح الخطأ. إذا لم يكن لديك حق الوصول إلى تفاصيل رسالة الخطأ لسبب ما، فتأكد من:

  • لم تنته صلاحية SAS أو رمز الأمان المميز الآخر الذي تستخدمه.
  • بالنسبة لمصادقة شهادة X.509، لا تنتهي صلاحية شهادة الجهاز أو شهادة المرجع المصدق المقترنة بالجهاز. لمعرفة كيفية تسجيل شهادات المرجع المصدق X.509 مع IoT Hub، راجع إعداد أمان X.509 في مركز Azure IoT.
  • بالنسبة لمصادقة بصمة الإبهام لشهادة X.509، يتم تسجيل بصمة الإبهام لشهادة الجهاز مع IoT Hub.
  • يتم تكوين بيانات اعتماد التخويل بشكل جيد للبروتوكول الذي تستخدمه. لمعرفة المزيد، راجع التحكم في الوصول إلى IoT Hub.
  • تحتوي قاعدة التخويل المستخدمة على إذن العملية المطلوبة.
  • بالنسبة لرسائل الخطأ الأخيرة التي تبدأ ب "principal..."، يمكن حل هذا الخطأ عن طريق تعيين المستوى الصحيح من إذن Azure RBAC للمستخدم. على سبيل المثال، يمكن للمالك في مركز IoT تعيين دور "مالك بيانات مركز IoT"، والذي يمنح جميع الأذونات. جرب هذا الدور لحل مشكلة عدم وجود إذن.

403002 IoTHubQuotaExceeded

قد ترى الطلبات إلى IoT Hub تفشل مع الخطأ 403002 IoTHubQuotaExceeded. وفي مدخل Microsoft Azure، لا يتم تحميل قائمة أجهزة مركز IoT.

يحدث هذا الخطأ عادة عند تجاوز الحصة النسبية للرسالة اليومية لمركز IoT. لحل هذا الخطأ:

قد يتم إرجاع هذا الخطأ أيضا بواسطة مهمة استيراد مجمعة عندما يقترب عدد الأجهزة المسجلة في مركز IoT أو يتجاوز حد الحصة النسبية ل IoT Hub. لمعرفة المزيد، راجع استكشاف أخطاء مهام الاستيراد وإصلاحها.

403004 DeviceMaximumQueueDepthExceeded

عند محاولة إرسال رسالة من السحابة إلى الجهاز، قد ترى أن الطلب يفشل مع ظهور الخطأ 403004 أو DeviceMaximumQueueDepthExceeded.

السبب الأساسي لهذا الخطأ هو أن عدد الرسائل التي تم وضعها في قائمة الانتظار للجهاز يتجاوز حد قائمة الانتظار.

السبب الأكثر احتمالا الذي يدفعك إلى الوصول إلى هذا الحد هو أنك تستخدم HTTPS لتلقي الرسالة، ما يؤدي إلى الاستقصاء المستمر باستخدام ReceiveAsync، ما يؤدي إلى تقييد IoT Hub للطلب.

النمط المدعوم للرسائل من السحابة إلى الجهاز مع HTTPS هو أجهزة متصلة بشكل متقطع تتحقق من الرسائل بشكل غير متكرر (أقل من كل 25 دقيقة). لتقليل احتمالية التشغيل في حد قائمة الانتظار، قم بالتبديل إلى AMQP أو MQTT للرسائل من السحابة إلى الجهاز.

بدلا من ذلك، قم بتحسين منطق جانب الجهاز لإكمال الرسائل المدرجة في قائمة الانتظار أو رفضها أو التخلي عنها بسرعة، أو تقصير وقت البقاء، أو التفكير في إرسال رسائل أقل. راجع وقت الرسالة C2D للعيش.

وأخيرا، ضع في اعتبارك استخدام Purge Queue API لتنظيف الرسائل المعلقة بشكل دوري قبل الوصول إلى الحد الأقصى.

403006 DeviceMaximumActiveFileUploadLimitExceeded

قد ترى أن طلب تحميل الملف يفشل مع رمز الخطأ 403006 والرسالة "لا يمكن أن يتجاوز عدد طلبات تحميل الملفات النشطة 10".

يحدث هذا الخطأ لأن كل عميل جهاز محدود لتحميلات الملفات المتزامنة. يمكنك بسهولة تجاوز الحد إذا لم يقم جهازك بإعلام IoT Hub عند اكتمال عمليات تحميل الملفات. تحدث هذه المشكلة عادة بسبب شبكة جانبية غير موثوق بها للجهاز.

لحل هذا الخطأ، تأكد من أن الجهاز يمكنه إعلام إكمال تحميل ملف IoT Hub على الفور. ثم حاول تقليل رمز SAS TTL لتكوين تحميل الملف.

404001 DeviceNotFound

أثناء اتصال من سحابة إلى جهاز (C2D)، مثل رسالة C2D أو تحديث مزدوج أو أسلوب مباشر، قد ترى أن العملية تفشل مع حدوث خطأ 404001 DeviceNotFound.

فشلت العملية بسبب تعذر العثور على الجهاز بواسطة IoT Hub. إما أن الجهاز غير مسجل أو معطل.

لحل هذا الخطأ، قم بتسجيل معرف الجهاز الذي استخدمته، ثم حاول مرة أخرى.

404103 DeviceNotOnline

قد ترى أن أسلوبا مباشرا إلى جهاز يفشل مع الخطأ 404103 DeviceNotOnline حتى إذا كان الجهاز متصلا بالإنترنت.

إذا كنت تعرف أن الجهاز متصل بالإنترنت ولا يزال يحصل على الخطأ، فمن المحتمل أن يحدث الخطأ لأن رد الاتصال المباشر للأسلوب غير مسجل على الجهاز.

لتكوين جهازك بشكل صحيح لرد الاتصال المباشر للأسلوب، راجع معالجة أسلوب مباشر على جهاز.

404104 DeviceConnectionClosedRemotely

قد ترى أن الأجهزة قطع الاتصال في فاصل زمني منتظم (كل 65 دقيقة، على سبيل المثال) وتشاهد 404104 DeviceConnectionClosedRemotely في سجلات موارد IoT Hub. في بعض الأحيان، ترى أيضا 401003 IoTHubUn المصرح به وحدث اتصال جهاز ناجح بعد أقل من دقيقة.

أو، يتم قطع اتصال الأجهزة بشكل عشوائي، وتشاهد 404104 DeviceConnectionClosedRemotely في سجلات موارد IoT Hub.

أو، العديد من الأجهزة قطع الاتصال في وقت واحد، ترى تراجعا في مقياس الأجهزة المتصلة (connectedDeviceCount)، وهناك المزيد 404104 DeviceConnectionClosedRemotelyو500xxx أخطاء داخلية في سجلات Azure Monitor من المعتاد.

يمكن أن يحدث هذا الخطأ بسبب انتهاء صلاحية رمز SAS المميز المستخدم للاتصال ب IoT Hub ، مما يؤدي إلى قطع اتصال IoT Hub بالجهاز. يتم إعادة تأسيس الاتصال عند تحديث الرمز المميز بواسطة الجهاز. على سبيل المثال، تنتهي صلاحية رمز SAS المميز كل ساعة بشكل افتراضي ل C SDK، مما قد يؤدي إلى قطع اتصال منتظم. لمعرفة المزيد، راجع 401003 IoTHubUn المصرح به.

وتشمل بعض الاحتمالات الأخرى ما يلي:

  • فقد الجهاز اتصال الشبكة الأساسي لفترة أطول من الاحتفاظ ب MQTT على قيد الحياة، مما أدى إلى انتهاء مهلة الخمول عن بعد. يمكن أن يكون إعداد البقاء على قيد الحياة MQTT مختلفا لكل جهاز.
  • أرسل الجهاز إعادة تعيين على مستوى TCP/IP ولكنه لم يرسل على مستوى MQTT DISCONNECTالتطبيق . بشكل أساسي، أغلق الجهاز فجأة اتصال مأخذ التوصيل الأساسي. في بعض الأحيان، تحدث هذه المشكلة بسبب الأخطاء في الإصدارات القديمة من Azure IoT SDK.
  • تعطل التطبيق من جانب الجهاز.

أو، قد يواجه IoT Hub مشكلة عابرة. راجع خطأ خادم IoT Hub الداخلي.

لحل هذا الخطأ:

نوصي باستخدام حزم SDK لجهاز Azure IoT لإدارة الاتصالات بشكل موثوق. لمعرفة المزيد، راجع إدارة الاتصال والمراسلة الموثوق بها باستخدام حزم SDK لجهاز Azure IoT Hub

409001 DeviceAlreadyExists

عند محاولة تسجيل جهاز في IoT Hub، قد ترى أن الطلب يفشل مع الخطأ 409001 DeviceAlreadyExists.

يحدث هذا الخطأ بسبب وجود جهاز بنفس معرف الجهاز في مركز IoT.

لحل هذا الخطأ، استخدم معرف جهاز آخر وحاول مرة أخرى.

409002 LinkCreationConflict

قد ترى الخطأ 409002 LinkCreationConflict في السجلات جنبا إلى جنب مع قطع اتصال الجهاز أو فشل الرسالة من السحابة إلى الجهاز.

بشكل عام، يحدث هذا الخطأ عندما يكتشف IoT Hub أن العميل لديه أكثر من اتصال واحد. في الواقع، عند وصول طلب اتصال جديد لجهاز مع اتصال موجود، يقوم IoT Hub بإغلاق الاتصال الحالي بهذا الخطأ.

في الحالة الأكثر شيوعا، تتسبب مشكلة منفصلة (مثل 404104 DeviceConnectionClosedRemotely) في قطع اتصال الجهاز. يحاول الجهاز إعادة إنشاء الاتصال على الفور، ولكن لا يزال IoT Hub يعتبر الجهاز متصلا. يقوم IoT Hub بإغلاق الاتصال السابق وتسجيل هذا الخطأ.

أو، يتسبب المنطق الخاطئ من جانب الجهاز في قيام الجهاز بإنشاء الاتصال عندما يكون أحدها مفتوحا بالفعل.

لحل هذا الخطأ، ابحث عن أخطاء أخرى في السجلات التي يمكنك استكشافها وإصلاحها لأن هذا الخطأ يظهر عادة كتأثير جانبي لقضية عابرة مختلفة. وإلا، فتأكد من إصدار طلب اتصال جديد فقط إذا انخفض الاتصال.

412002 DeviceMessageLockLost

عند محاولة إرسال رسالة من السحابة إلى الجهاز، قد ترى أن الطلب يفشل مع الخطأ 412002 DeviceMessageLockLost.

يحدث هذا الخطأ لأنه عندما يتلقى جهاز رسالة من سحابة إلى جهاز من قائمة الانتظار (على سبيل المثال، باستخدام ReceiveAsync()) يتم تأمين الرسالة بواسطة IoT Hub لمدة مهلة تأمين لمدة دقيقة واحدة. إذا حاول الجهاز إكمال الرسالة بعد انتهاء مهلة التأمين، يطرح IoT Hub هذا الاستثناء.

إذا لم يحصل IoT Hub على الإعلام خلال مدة مهلة التأمين لمدة دقيقة واحدة، فإنه يعين الرسالة مرة أخرى إلى حالة Enqueued . يمكن للجهاز محاولة تلقي الرسالة مرة أخرى. لمنع حدوث الخطأ في المستقبل، نفذ منطق جانب الجهاز لإكمال الرسالة في غضون دقيقة واحدة من تلقي الرسالة. لا يمكن تغيير هذه المهلة التي تبلغ دقيقة واحدة.

429001 ThrottlingException

قد ترى أن طلباتك إلى IoT Hub تفشل مع الخطأ 429001 ThrottlingException.

يحدث هذا الخطأ عند تجاوز حدود تقييد IoT Hub للعملية المطلوبة.

لحل هذا الخطأ، تحقق مما إذا كنت تصل إلى حد التقييد عن طريق مقارنة مقياس محاولات إرسال رسالة القياس عن بعد مقابل الحدود المحددة أعلاه. يمكنك أيضا التحقق من قياس عدد أخطاء التقييد . للحصول على معلومات حول هذه المقاييس، راجع مقاييس القياس عن بعد للجهاز. للحصول على معلومات حول كيفية استخدام المقاييس لمساعدتك في مراقبة مركز IoT، راجع مراقبة مركز IoT.

يقوم IoT Hub بإرجاع 429 ThrottlingException فقط بعد انتهاك الحد لفترة طويلة جدا. يتم ذلك بحيث لا يتم إسقاط رسائلك إذا حصل مركز IoT على حركة مرور الاندفاع. في هذه الأثناء، يعالج IoT Hub الرسائل بمعدل تقييد العملية، والذي قد يكون بطيئا إذا كان هناك الكثير من نسبة استخدام الشبكة في التراكم. لمعرفة المزيد، راجع تشكيل حركة مرور IoT Hub.

ضع في اعتبارك توسيع نطاق IoT Hub إذا كنت قيد التشغيل في حدود الحصة النسبية أو التقييد.

أخطاء 500xxx داخلية

قد ترى أن طلبك إلى IoT Hub يفشل مع خطأ يبدأ ب 500 و/أو نوع من "خطأ الخادم". بعض الاحتمالات هي:

  • 500001 ServerError: واجه IoT Hub مشكلة من جانب الخادم.

  • 500008 GenericTimeout: تعذر على IoT Hub إكمال طلب الاتصال قبل انتهاء المهلة.

  • ServiceUnavailable (لا يوجد رمز خطأ): واجه IoT Hub خطأ داخليا.

  • InternalServerError (لا يوجد رمز خطأ): صادف IoT Hub خطأ داخليا.

يمكن أن يكون هناك عدد من الأسباب للاستجابة لخطأ 500xxx. في جميع الحالات، تكون المشكلة عابرة على الأرجح. بينما يعمل فريق IoT Hub بجد للحفاظ على اتفاقية مستوى الخدمة، يمكن أن تواجه مجموعات فرعية صغيرة من عقد IoT Hub أحيانا أخطاء عابرة. عندما يحاول جهازك الاتصال بعقدة تواجه مشكلات، تتلقى هذا الخطأ.

للتخفيف من أخطاء 500xxx، قم بإصدار إعادة محاولة من الجهاز. لإدارة عمليات إعادة المحاولة تلقائيا، تأكد من استخدام أحدث إصدار من Azure IoT SDKs. للحصول على أفضل الممارسات حول معالجة الأخطاء العابرة وإعادة المحاولة، راجع معالجة الأخطاء العابرة.

إذا استمرت المشكلة، فتحقق من صحة المواردوحالة Azure لمعرفة ما إذا كان لدى IoT Hub مشكلة معروفة. يمكنك أيضا استخدام ميزة تجاوز الفشل اليدوي.

إذا لم تكن هناك مشاكل معروفة واستمر المشكلة، فاتصل بالدعم لمزيد من التحقيق.

503003 PartitionNotFound

قد ترى أن الطلبات إلى IoT Hub تفشل مع الخطأ 503003 PartitionNotFound.

هذا الخطأ داخلي ل IoT Hub ومن المحتمل أن يكون عابرا. راجع أخطاء خادم IoT Hub الداخلي.

لحل هذا الخطأ، راجع أخطاء خادم IoT Hub الداخلي.

504101 GatewayTimeout

عند محاولة استدعاء أسلوب مباشر من IoT Hub إلى جهاز، قد ترى أن الطلب يفشل مع الخطأ 504101 GatewayTimeout.

يحدث هذا الخطأ لأن IoT Hub واجه خطأ ولم يتمكن من تأكيد ما إذا كان الأسلوب المباشر قد اكتمل قبل انتهاء المهلة. أو عند استخدام إصدار سابق من Azure IoT C# SDK (<1.19.0)، يمكن إسقاط ارتباط AMQP بين الجهاز وIoT Hub بصمت بسبب خطأ.

لحل هذا الخطأ، قم بإصدار إعادة المحاولة أو الترقية إلى أحدث إصدار من Azure IOT C# SDK.