Подтвердить что ты не робот

Как работает MTOM?

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

Как это работает вообще?

4b9b3361

Ответ 1

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

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

В этом приведен пример того, как выглядит сообщение, отправленное по проводу.

Ответ 2

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

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

< tns: data > Очень looooooooooooooooooooooong base64Binary string </tns: data >

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

enter image description here

При использовании 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"
Content-Type: image/png

двоичные данные изображения здесь

Ответ 3

Есть несколько факторов, которые не упоминаются в других ответах. Можно подумать, почему MTOM не используется по умолчанию, поскольку он "быстрее", чем кодировка текстового сообщения (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.