img w3c mtom

w3c - img - ¿Cómo funciona MTOM?



tags html5 (3)

MTOM es el Mecanismo de Optimización de Transmisión de Mensajes del W3C, un método para enviar de manera eficiente datos binarios hacia y desde servicios web.

¿Cómo funciona en general?


Hay algunos factores que otras respuestas no mencionan. Uno podría pensar por qué MTOM no se usa como predeterminado ya que es "más rápido" que la codificación de mensajes de texto (Base64). Es porque MTOM no siempre es más rápido. MTOM solo debe usarse en transferencias de mensajes grandes porque viene con una sobrecarga. Para mensajes de tamaño pequeño, el rendimiento de MTOM será peor que la codificación de mensajes de texto (Base64).

Si MTOM se usa para mensajes grandes, es más rápido que Base64 ya que usa binario sin formato para la transferencia de datos. Para entender eso, uno debe entender cómo funciona Base64.

Base64 utiliza 6 bits (log2 (64)) para representar 1 carácter, lo que significa que base64 usa 4 caracteres para representar 24 bits ( 3 bytes ). Entonces, si el tamaño del mensaje es n bytes , base64 usará 4 * (n / 3) bytes para representar sus datos, lo que significa que será más lento en 1/3 que MTOM.


Si coloca Wireshark (o habilitado System.Net Logging ) en el servicio no MTOM habilitado, debería ver las solicitudes SOAP con los datos binarios codificados como BASE64. Enviarlo como BASE64 aumenta el tamaño de los datos binarios, pero (supongo) lo hace más interoperable.

Con MTOM, los mensajes SOAP se envían como mensajes MIME con la codificación BASE64 siendo reemplazada por un marcador de posición. Los datos binarios se colocan entre delimitadores (lo que sucede para cada fragmento de datos binarios) y luego se colocan al final de la solicitud SOAP. Los datos binarios se envían sin codificar. IIRC, MTOM también determina si enviarlo como mensaje MIME aumentará el tamaño de la llamada SOAP y, si no proporciona un guardado, lo enviará como un mensaje SOAP normal.

Esto proporciona un ejemplo de cómo se ve el mensaje enviado a través del cable.


Todo comienza con el hecho de que SOAP es XML . Y cuando envía algo que no sea texto, por ejemplo, una imagen, debe convertirse en un tipo de datos que un procesador XML pueda comprender.

Sin MTOM, su imagen se convertirá en base64Binary y se colocará justo en el medio de su sobre SOAP. Este proceso de conversión engorda los datos.

<tns: data> Una base muy muyaooooooooooooooooooooong64Binary </ tns: data>

Aquí hay una ilustración simple:

Con MTOM, la imagen se transmitirá fuera del sobre como un archivo adjunto MIME , en resumen, se envía de acuerdo con su tipo de datos original: un jpg, png o gif. Por supuesto, aún se transmite como datos binarios, pero esta vez no hay conversión relacionada con XML, lo que evita la sobrecarga de cómputo. XOP entra en la imagen ya que es el que da la ubicación de la imagen externalizada.

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

Content-id: "SomeUniqueID"
Tipo de contenido: image / png

imagen de datos binarios aquí