#azure-iot-hub #raspberry-pi4 #azure-iot-sdk
Вопрос:
У меня есть основной проект dotnet, работающий под управлением версии 1.37.2 Microsoft.Лазурь.Устройства.Клиент поверх Linux Raspbian (Buster 5.4.83) на 2 ГБ RaspBerry Pi4B. Проект отправляет телеметрию каждые 5 минут в центр интернета вещей Azure. Проект также регистрирует ряд прямых методов, которые будут вызываться с помощью «setMethod Handler» следующим образом:
await _iotHubClient.SetMethodHandlerAsync("MethodToCall", MethodToCallHandler, null);
У меня есть несколько устройств в реальном мире, подключенных к Интернету по беспроводной локальной сети и стандартным домашним подключениям к Интернету.
Я заметил, что на некоторых устройствах я могу относительно надежно вызывать Directmetods, на некоторых мне часто приходится пробовать три или четыре раза, прежде чем я получу успешный ответ, а на другие я никогда не смогу успешно позвонить. Когда вызовы DirectMethod завершаются неудачно, я всегда получаю {"status:501", "payload":null}
.
Любая помощь будет признательна.
Ответ №1:
У вас есть один и тот же кодверсия, развернутая на обоих устройствах, которые работают и не работают? 501 обычно означает «Не реализовано». В azure-iot-sdk-csharp вы можете прочитать следующее для кода ошибки 501:
«Эквивалентно коду состояния HTTP 501, не реализована ошибка сервера. Он используется, когда вызов метода из службы указывает имя метода, не зарегистрированное клиентом для обратного вызова.»
некоторым мне часто приходится пробовать три или четыре раза, прежде чем я получаю успешный ответ, а другим я никогда не могу успешно позвонить.
Прежде чем вы сможете успешно вызвать методы на этих устройствах, вы когда-нибудь получали сообщение об ошибке 501 или получали их, как описано здесь (404 или 504)? Если вы никогда не видели 501 ошибку на «рабочих устройствах», вам необходимо убедиться, что у вас есть одинаковые версии кода, развернутые на «нерабочих устройствах».
Комментарии:
1. Привет @asergaz, спасибо, что связался. Это идентичная версия sw, развернутая на идентичном оборудовании. Так что, похоже, проблема не в этом. На устройствах, которые иногда работают, я получаю 501, полезная нагрузка равна нулю, когда она не работает, и правильный ответ, когда это происходит. Это кажется очень странным.
2. Это интересно. И все устройства используют один и тот же центр интернета вещей? Вы пытались воссоздать их личность? Удалите устройство и добавьте его снова?
3. Да, все используют один и тот же концентратор. Нет, я не пытался воссоздать там личность, я попробую это сделать. Я собираюсь сказать, что идентификация в порядке, так как я вижу, что устройства передают телеметрическую информацию в концентратор в порядке. Знаете ли вы о способах получения дополнительной отладочной информации?
4. Если вы подозреваете, что это проблема на стороне сервера, лучше открыть заявку в службу поддержки Azure. Инженеры могут просмотреть журналы на стороне сервера для вас: aka.ms/IoTHelp