我想了解Azure IoT C SDK的特定連接和錯誤狀態。Azure IoT C SDK中連接狀態的語義
我可以用IoTHubClient_SetConnectionStatusCallback
註冊回撥號碼,以便接收IOTHUB_CLIENT_CONNECTION_STATUS
和IOTHUB_CLIENT_CONNECTION_STATUS_REASON
。
第一個值是IOTHUB_CLIENT_CONNECTION_AUTHENTICATED
和IOTHUB_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)
從這些信息,我不能確定何時連接或重新連接。