Вопрос

MTOM - это механизм оптимизации передачи сообщений W3C, метод эффективной отправки двоичных данных в веб-службы и из них.

Как это работает в целом?

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

Решение

Если вы добавили Wireshark (или включили System.Net Logging ) в службе без поддержки MTOM, вы должны увидеть запросы SOAP с двоичными данными, закодированными как BASE64. Отправка его как BASE64 увеличивает размер двоичных данных, но (я полагаю) делает их более совместимыми.

При использовании MTOM сообщения SOAP отправляются в виде сообщений MIME с заменой кодировки BASE64 на заполнитель. Затем двоичные данные помещаются между разделителями (что происходит для каждого фрагмента двоичных данных), а затем помещаются в конце запроса SOAP. Затем двоичные данные отправляются в незашифрованном виде. IIRC, MTOM также определяет, увеличит ли отправка его в виде сообщения MIME размер вызова SOAP, и, если он не обеспечивает сохранение, он отправит его как обычное сообщение SOAP.

Это дает пример того, что сообщение, отправленное по сети, выглядит следующим образом.

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

Все начинается с того, что SOAP является XML . А когда вы отправляете что-либо, кроме текста, например, изображение, - оно должно быть преобразовано в тип данных, понятный процессору XML.

Без MTOM ваше изображение будет преобразовано в base64Binary и помещено в середину конверта SOAP. Этот процесс преобразования делает данные жирными.

  

< tns: data > очень крутоооооооооооооооооооооооооооценяемая base64Binary строка < / tns: data >

Вот простая иллюстрация:

введите описание изображения здесь

С помощью MTOM изображение будет передаваться за пределы конверта в виде MIME-вложения - короче говоря, оно отправляется в соответствии с исходным типом данных: jpg, png или GIF. Конечно, он все еще передается в виде двоичных данных, но на этот раз нет преобразования, связанного с XML, что позволяет избежать накладных расходов на вычисления. На экране появляется XOP, поскольку именно он определяет местоположение внешнего изображения.

<soap:Envelope>
    <soap:Body>
        <tns:data>
            <xop:include href="SomeUniqueID-ThatLeadsToTheImage"/>
        </tns:data>
    </soap:Body>
</soap:Envelope>
  

Content-id: " SomeUniqueID "
  Тип содержимого: image / png

     

здесь представлены двоичные данные

Есть несколько факторов, которые не упоминаются в других ответах. Кто-то может подумать, почему MTOM не используется по умолчанию, поскольку он & Quot; быстрее & Quot; , чем кодировка текстовых сообщений (Base64). Это потому, что MTOM не всегда быстрее. MTOM следует использовать только при передаче больших сообщений, потому что это связано с накладными расходами. Для сообщений небольшого размера производительность MTOM будет хуже кодировки текстовых сообщений (Base64).

Если MTOM используется для больших сообщений, это быстрее, чем Base64, так как он использует сырой двоичный файл для передачи данных. Чтобы понять это, нужно понять, как работает Base64.

Base64 использует 6 бит (log2 (64)) для представления 1 символа , что означает, что base64 использует 4 символа для представления 24 бит ( 3 байта ). Поэтому, если размер сообщения составляет n байт , base64 будет использовать 4 * (n / 3) байт для представления ваших данных, что означает, что они будут медленнее на 1 / 3 , чем MTOM.

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