Я создал приложение 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, то все работает нормально.