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

时间:2018-08-27 14:13:53

标签: azure .net-core iot azure-iot-hub

我们已经将设备通过MQTT连接到 IoT Hub (默认设置),并且它们都每隔 65分钟(精确到毫秒)保持重新连接。

设备应用程序详细信息:

  • .net Core 2.1
  • 图书馆:
    • Microsoft.Azure.Devices v1.17.0
    • Microsoft.Azure.Devices.Client v1.18.0
  • 连接类型:MQTT
  • 操作系统:Windows 10 IoT Enterprise(戴尔工业PC),Raspbian(Raspberry PI 3)和Windows IoT Core(Raspberry PI 3)-行为相同。

我们正在使用 IoT版本中心的免费版本/层

重新连接时:

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

这对于我们的操作而言不是一个非常关键的问题,因为在此阶段它是一个PoC,每次重新连接大约需要2秒钟,但是,我们希望在上线之前了解此行为的根本原因。

2 个答案:

答案 0 :(得分:2)

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

Reliability features in the SDKs

Security tokens in IoT Hub

答案 1 :(得分:0)

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

deviceClient.SetRetryPolicy(new NoRetry());