设备每 65 分钟重新连接到 Azure IoT 中心

Devices reconnect to Azure IoT Hub every 65 minutes

我们有设备通过 MQTT(默认设置)连接到 IoT Hub,并且它们都精确地每 65 分钟 重新连接一次(到毫秒)。

设备应用详细信息:

  • .net 核心 2.1
  • 图书馆:
    • Microsoft.Azure.Devices v1.17.0
    • Microsoft.Azure.Devices.Client v1.18.0
  • 连接类型:MQTT
  • OS:Windows 10 个物联网企业(戴尔工业 PC),Raspbian(Raspberry PI 3)和 Windows 物联网核心(Raspberry PI 3) - 所有行为都一样。

我们正在使用物联网中心免费version/tier。

重新连接发生时:

  • DeviceClient StatusChangesHandler 报告连接状态:Disconnected_Retrying 和原因:No_Network
  • IoT 中心诊断报告
    1. deviceDisconnect => 404104 DeviceConnectionClosedRemotely
    2. deviceConnect => 401003 IoTHubUnauthorized
    3. deviceConnect => 没有错误,成功
  • DeviceClient StatusChangesHandler 报告连接状态:Connected 和原因:Connection_Ok

这对我们的操作来说不是一个非常关键的问题,因为在这个阶段它是一个 PoC,每次重新连接大约需要 2 秒,但是,我们想在我们上线之前知道这种行为的根本原因。

DeviceClient.RetryPolicy = RetryPolicyType.No_Retry 已在 Microsoft.Azure.Devices.Client v1.18.0 中弃用。请尝试使用 Microsoft.Azure.Devices.Client.SetRetryPolicy(IRetryPolicy retryPolicy) 代替,如以下代码。

deviceClient.SetRetryPolicy(new NoRetry());

您是否使用 SAS 令牌对 IoT 中心进行身份验证?如果是这样,您很可能会在刷新令牌时遇到断开连接的情况。这由 SDK 处理,在这种情况下,SDK 使用重试策略重新连接。如果未明确设置重试策略,它将使用默认值(4 分钟超时的指数退避)。如果您将默认设置为不重试,则无法在不受干扰的情况下重新建立连接。

Reliability features in the SDKs

Security tokens in IoT Hub