Сбой прямых сообщений со статусом: 501 Полезная нагрузка: Ноль

#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, не реализована ошибка сервера. Он используется, когда вызов метода из службы указывает имя метода, не зарегистрированное клиентом для обратного вызова.»

Ref: https://github.com/Azure/azure-iot-sdk-csharp/blob/master/iothub/device/src/MethodResponseStatusCode.cs#L21

некоторым мне часто приходится пробовать три или четыре раза, прежде чем я получаю успешный ответ, а другим я никогда не могу успешно позвонить.

Прежде чем вы сможете успешно вызвать методы на этих устройствах, вы когда-нибудь получали сообщение об ошибке 501 или получали их, как описано здесь (404 или 504)? Если вы никогда не видели 501 ошибку на «рабочих устройствах», вам необходимо убедиться, что у вас есть одинаковые версии кода, развернутые на «нерабочих устройствах».

Комментарии:

1. Привет @asergaz, спасибо, что связался. Это идентичная версия sw, развернутая на идентичном оборудовании. Так что, похоже, проблема не в этом. На устройствах, которые иногда работают, я получаю 501, полезная нагрузка равна нулю, когда она не работает, и правильный ответ, когда это происходит. Это кажется очень странным.

2. Это интересно. И все устройства используют один и тот же центр интернета вещей? Вы пытались воссоздать их личность? Удалите устройство и добавьте его снова?

3. Да, все используют один и тот же концентратор. Нет, я не пытался воссоздать там личность, я попробую это сделать. Я собираюсь сказать, что идентификация в порядке, так как я вижу, что устройства передают телеметрическую информацию в концентратор в порядке. Знаете ли вы о способах получения дополнительной отладочной информации?

4. Если вы подозреваете, что это проблема на стороне сервера, лучше открыть заявку в службу поддержки Azure. Инженеры могут просмотреть журналы на стороне сервера для вас: aka.ms/IoTHelp