Устройства подключаются к Azure IoT Hub каждые 65 минут - PullRequest
0 голосов
/ 27 августа 2018

У нас есть устройства, подключенные к IoT Hub через MQTT (настройки по умолчанию), и все они продолжают повторное подключение точно каждые 65 минут (с точностью до миллисекунды).

Информация о приложении устройства:

  • .net Core 2.1
  • Библиотеки:
    • Microsoft.Azure.Devices v1.17.0
    • Microsoft.Azure.Devices.Client v1.18.0
  • Тип подключения: MQTT
  • ОС: Windows 10 IoT Enterprise (промышленный ПК Dell), Raspbian (Raspberry PI 3) и Windows IoT Core (Raspberry PI 3) - все ведут себя одинаково.

Мы используем бесплатную версию / уровень IoT Hub .

Когда происходит переподключение:

  • 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 голосов
/ 29 августа 2018

Используете ли вы токен SAS для аутентификации в IoT Hub? Если это так, вы, скорее всего, столкнетесь с разрывом соединения при обновлении вашего токена. Это обрабатывается SDK, и в этом случае SDK использует политику повтора для повторного подключения. Если политика повторных попыток не установлена ​​явно, она использует значение по умолчанию (экспоненциальный откат с 4-минутным таймаутом). Если для параметра по умолчанию установлено значение «Не повторять», соединение не может быть восстановлено без помех.

Функции надежности в SDK

Жетоны безопасности в IoT Hub

0 голосов
/ 28 августа 2018

DeviceClient.RetryPolicy = RetryPolicyType.No_Retry устарела в Microsoft.Azure.Devices.Client v1.18.0. Попробуйте вместо этого использовать Microsoft.Azure.Devices.Client.SetRetryPolicy (IRetryPolicy retryPolicy) , как показано в следующем коде.

deviceClient.SetRetryPolicy(new NoRetry());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...