繁体   English   中英

Azure IoT C SDK中的连接状态语义

[英]Semantic of Connection Status in the 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中心。 但是通信错误可能根本不存在。 当我尝试使用无效的证书或私钥进行连接时,也会出现相同的问题。

每次尝试时,我都会得到以下错误:

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)

从这些信息中,我无​​法确定何时连接或重新连接。

感谢您的提问。

上面列出的原因是由以下条件触发的:

IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN

  • SAS令牌(由用户提供)已过期,并且不再可以用于根据Azure IoT中心对设备进行身份验证。 解决方案:提供一个新的有效SAS令牌。

IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED

  • 设备无法通过身份验证,因为用户在Azure IoT集线器上将其禁用(请参阅设备资源管理器中的“状态”字段)

IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL

  • 根据Azure IoT中心在尝试进行身份验证时的响应,认为用户提供的设备密钥无效

IOTHUB_CLIENT_CONNECTION_RETRY_EXPIRED

  • Azure IoT中心客户端具有一项称为RetryPolicy的功能(可以使用IotHubClient_SetRetryPolicy进行设置)。 它具有一个属性,该属性限制了发生故障时客户端可以尝试重新连接的最长时间。 如果达到了最大时间,则以状态UNAUTHENTICATED和原因RETRY_EXPIRED调用连接状态。

IOTHUB_CLIENT_CONNECTION_NO_NETWORK IOTHUB_CLIENT_CONNECTION_COMMUNICATION_ERROR

  • 如果禁用了重试策略,则可能会提供这些错误原因来指示存在网络连接问题。

IOTHUB_CLIENT_CONNECTION_OK

  • 提供的状态为AUTHENTICATED。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM