Pregunta

MTOM es el mecanismo de optimización de transmisión de mensajes W3C, un método para enviar datos binarios de manera eficiente desde y hacia los servicios web.

¿Cómo funciona en general?

¿Fue útil?

Solución

Si coloca Wireshark (o habilitó System.Net Logging ) en el servicio no 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 reemplazada por un marcador de posición. Los datos binarios se colocan entre delimitadores (lo que sucede para cada pieza 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 un mensaje MIME aumentará el tamaño de la llamada SOAP y si no proporciona un ahorro, lo enviará como un mensaje SOAP normal.

Esto proporciona un ejemplo de lo que el mensaje enviado por cable se ve así.

Otros consejos

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 entender.

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

  

< tns: data > Un muy muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu como base64Binary string < / tns: data >

Aquí hay una ilustración simple:

ingrese la descripción de la imagen aquí

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, todavía se transmite como datos binarios, pero esta vez, no hay conversión relacionada con XML, evitando la sobrecarga computacional. XOP entra en escena ya que es el que proporciona 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

     

datos binarios de imagen aquí

Hay algunos factores que otras respuestas no mencionan. Uno podría pensar por qué MTOM no se usa por defecto, ya que es & Quot; más rápido & Quot; 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 pequeño tamañ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 binarios sin procesar para la transferencia de datos. Para entender eso, uno debe entender cómo funciona Base64.

Base64 usa 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top