2017-05-25 26 views
0

我想了解Azure IoT C SDK的特定連接和錯誤狀態。Azure IoT C SDK中連接狀態的語義

我可以用IoTHubClient_SetConnectionStatusCallback註冊回撥號碼,以便接收IOTHUB_CLIENT_CONNECTION_STATUSIOTHUB_CLIENT_CONNECTION_STATUS_REASON

第一個值是IOTHUB_CLIENT_CONNECTION_AUTHENTICATEDIOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED,我假設它只是表示「已連接」和「未連接」。原因是更有趣但是:

  • IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN
  • IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED
  • IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL
  • IOTHUB_CLIENT_CONNECTION_RETRY_EXPIRED
  • IOTHUB_CLIENT_CONNECTION_NO_NETWORK
  • IOTHUB_CLIENT_CONNECTION_COMMUNICATION_ERROR
  • IOTHUB_CLIENT_CONNECTION_OK

所以我的第一個問題是:各個原因的語義是什麼?他們什麼時候發生?溝通錯誤包含什麼?錯誤是如此通用,它可能僅僅意味着「我們不想明確指定的任何錯誤」。

我的第二個問題超出了這個範圍。我正在嘗試使用X.509證書。但是,由於某些要求,我可能有不再有效的證書或刪除的設備ID。我可以通過使用可用的理由以某種方式區分這些情況嗎?當我嘗試連接一個不存在的ID時,我只是得到了IOTHUB_CLIENT_CONNECTION_COMMUNICATION_ERROR。從我的角度來看,我不再需要嘗試連接到IoT Hub,因爲我的設備不存在。但通信錯誤可能是任何事情。當我嘗試連接無效的證書或私鑰時,出現了同樣的問題。

每次我嘗試我只是得到了錯誤:

Error: Time:Thu May 25 12:04:00 2017 File:~/azure-iot-sdk-c/iothub_client/src/iothubtransport_amqp_messenger.c Func:process_state_changes Line:1563 messagesender reported unexpected state 4 while messenger is starting 
Error: Time:Thu May 25 12:04:00 2017 File:~/azure-iot-sdk-c/iothub_client/src/iothubtransport_amqp_device.c Func:device_do_work Line:848 Device 'MyDevice' messenger failed to be started (messenger got into error state) 

從這些信息,我不能確定何時連接或重新連接。

回答

1

感謝您的問題。

你以上所列由以下條件觸發的原因:

IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN

  • 的SAS令牌(由用戶提供)期滿,並且不再可用於驗證對所述一個裝置Azure IoT Hub。解決方案:提供一個新的有效SAS令牌。

IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED

  • 設備不能因爲它是通過對Azure的物聯網中心用戶禁用(見的設備資源管理領域的國家)

IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL

    認證
  • 用戶提供的設備密鑰根據響應被視爲無效在嘗試從本質上天青物聯網中心認證

IOTHUB_CLIENT_CONNECTION_RETRY_EXPIRED

  • Azure的物聯網中心的客戶有一個叫做RetryPolicy功能(可使用IotHubClient_SetRetryPolicy設置)。它具有限制客戶端在發生故障時可以嘗試重新連接的最長時間的屬性。如果達到該最大時間,則會調用狀態爲UNAUTHENTICATED且原因爲RETRY_EXPIRED的連接狀態。

IOTHUB_CLIENT_CONNECTION_NO_NETWORK IOTHUB_CLIENT_CONNECTION_COMMUNICATION_ERROR

  • 如果重試策略被禁用,可能會提供這些錯誤的原因,表示有網絡連接問題。

IOTHUB_CLIENT_CONNECTION_OK

  • 與狀態AUTHENTICATED提供。