Сколько дополнительных накладных расходов возникает при отправке файла через веб-службу в виде массива байтов?

StackOverflow https://stackoverflow.com/questions/11820

  •  08-06-2019
  •  | 
  •  

Вопрос

Этот вопрос и ответ показывает, как отправить файл в виде массива байтов через веб-службу XML.Сколько накладных расходов возникает при использовании этого метода для передачи файлов?Я предполагаю, что данные выглядят примерно так:

<?xml version="1.0" encoding="UTF-8" ?>
<bytes>
    <byte>16</byte>
    <byte>28</byte>
    <byte>127</byte>
    ...
</bytes>

Если этот формат правильный, байты сначала необходимо преобразовать в символы UTF-8.Каждый из этих символов выделяет 8 байт.Байты хранятся в десятичном, шестнадцатеричном или двоичном формате?Насколько больше выглядит файл при отправке из-за данных XML и кодировки символов?Встроено ли сжатие в веб-сервисы?

Это было полезно?

Решение

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

http://en.wikipedia.org/wiki/Base64

А base64 закодированная версия примерно 137% размера исходного контента.

Другие советы

Я использую этот метод для некоторых внутренних корпоративных веб-сервисов и не заметил каких-либо серьезных замедлений (но это не значит, что его нет).

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

Я не уверен во всех деталях (сжатие, кодирование и т. д.), но обычно я просто использую WireShark для анализа сетевого трафика (пробуя различные методы), что затем позволяет вам точно увидеть, как он отправляется.

Например, если он сжат, блок данных пакета не должен читаться как обычный текст... однако, если он несжат, вы увидите просто старый XML-текст... как вы видели бы с HTTP-трафиком или даже FTP. в определенных случаях.

Чтобы повторить то, что сказал Кевин, в веб-службах .net, если у вас есть массив байтов, он по умолчанию отправляется как строка в кодировке Base64.Вы также можете заранее указать кодировку массива байтов.

Очевидно, что как только строка попадет на сервер (или клиент), вам придется вручную декодировать строку обратно в массив байтов, поскольку, к сожалению, это не делается автоматически.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top