2008-10-18 12 views
51

MTOM es el Mecanismo de optimización de transmisión de mensajes del W3C, un método para enviar de manera eficiente datos binarios desde y hacia servicios web.¿Cómo funciona MTOM?

¿Cómo funciona en general?

Respuesta

42

Si coloca Wireshark (o habilitado System.Net Logging) en el servicio que no está habilitado para MTOM, 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.

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

+5

"Los datos binarios se colocan entre delimitadores" alternativamente, se puede enviar un enlace a los datos binarios como parte del mensaje SOAP para permitir que los datos binarios existan fuera del XML y se descarguen, por ejemplo, en un clúster de servidores HTTP/S para el rendimiento. Esto se llama "Por referencia" – Eric

118

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: datos> Una cadena muy looooooooooooooooooooooong base64Binary </tns: Datos>

Aquí está un ejemplo sencillo:

enter image description here

Con masa máxima de despegue, se transmitirá la imagen fuera de el sobre como accesorio MIME - en sh o bien, 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"
Content-Type: image/png

imagen datos binarios aquí

+0

tiene algún código de muestra de este, de hecho, se me pidió que entendiera qué incluir en . De alguna manera estoy confundido. –

+0

Esa es una muy buena explicación, gracias – Tarik

+4

Muy buena ilustración. El símbolo de plátano también es divertido y entretenido. Mtom totalmente rocas. –

7

Hay algunos factores que otras respuestas Don Menciono 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 utiliza para mensajes grandes, es más rápido que Base64 ya que utiliza binario sin procesar 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 que significa que base64 utiliza 4 caracteres para representar 24 bits (3 bytes). Así que si el tamaño del mensaje es n bytes, base 64 se utiliza 4 * (N/3) bytes para representar sus datos lo que significa que será más lenta por 1/3 de masa máxima de despegue.

Cuestiones relacionadas