【问题标题】:Semantic of Connection Status in the Azure IoT C SDKAzure IoT C SDK 中连接状态的语义
【发布时间】:2017-05-25 10:09:14
【问题描述】:

我正在尝试了解 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)

根据这些信息,我无法确定何时连接或重新连接。

【问题讨论】:

    标签: c iot azure-iot-hub


    【解决方案1】:

    感谢您的提问。

    您上面列出的原因是由以下情况触发的:

    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。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2020-10-09
      • 1970-01-01
      • 2019-06-12
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多