Свойство IoT Hub C2D переполнено в теле сообщения - PullRequest
0 голосов
/ 24 сентября 2019

Я создал приложение IoT Hub и пытаюсь отправить BLOB-объект JSON на устройство Android с помощью нескольких сообщений «облако на устройство» (C2D) через консольное приложение C #.

Я разбил большой двоичный объект JSON на несколько строк длиной 64000 и отправил каждый кусок в отдельном C2D-сообщении.Я использовал 64000 в качестве длины строки, потому что длина строки равна размеру в байтах (см. https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-messages-construct),, и я оставил некоторое пространство для дополнительных свойств

Каждый кусок сохраняется как свойство, подобноеИтак:

 var message = new Message();
 message.MessageId = messageId;
 message.Ack = DeliveryAcknowledgement.Full;

 message.CreationTimeUtc = creationTime;
 message.Properties.Add("type", "EXAMPLE_TYPE");
 message.Properties.Add("example_data_key", chunk);
 message.Properties.Add("checksum", checksum);
 message.Properties.Add("page", pageNumber.ToString());
 message.Properties.Add("page_total", chunks.Count.ToString());

Сообщение успешно отправляется из моего консольного приложения, но когда я получаю его на моем устройстве Android (через протокол MQTT), большая часть данных в свойстве example_data_key находится внутритело сообщения, в котором оно, похоже, закодировано в URL.

Например, ":"3"," будет отображаться как %22%3A%223%22%2C%22, но строка в свойстве будет правильно декодирована

Любые идеипочему?

Редактировать: Забыл упомянуть, что это происходит только тогда, когда я отправляю действительно большое сообщение (например, строку длиной 64000). Если я, например, задаю строку длиной 32000, то все работает нормально.

1 Ответ

0 голосов
/ 24 сентября 2019

Не удалось воспроизвести вашу проблему:

Отправка сообщения C2D с помощью портала Azure, см. Следующий фрагмент экрана:

enter image description here

и устройство (например, мой Azure IoT Ho Tester ) получило сообщение:

MQTT:
{
  "Topic": "devices/Device1/messages/devicebound/%24.to=%2Fdevices%2FDevice1%2Fmessages%2FdeviceBound&example_data_key=%22%3A%223%22%2C%22",
  "Timestamp": "2019-09-24T02:24:42.6540481Z",
  "DupFlag": false,
  "QosLevel": 1,
  "Retain": false
}

Payload:
123

Как вы можете видеть выше Тема , MQTTобработчик подписки получил это свойство IoT Hub Azure в правильно закодированном формате:

example_data_key=%22%3A%223%22%2C%22

Я рекомендую посмотреть, как ваша библиотека MQTT обрабатывает тему, или попытаться использовать кодировку Base64 для этого значения свойства.Обратите внимание, что максимальный размер сообщения (включенные свойства) составляет 64 КБ.

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