Question

MTOM est le mécanisme d’optimisation de la transmission de messages du W3C, une méthode permettant d’envoyer efficacement des données binaires vers et depuis des services Web.

Comment ça marche en général?

Était-ce utile?

La solution

Si vous mettez Wireshark (ou activez Journalisation System.Net ) sur le service non activé pour MTOM, les demandes SOAP avec les données binaires codées en tant que BASE64. L’envoyer en tant que BASE64 augmente la taille des données binaires mais rend (je suppose) plus interopérable.

Avec MTOM, les messages SOAP sont envoyés en tant que messages MIME, le codage BASE64 étant remplacé par un espace réservé. Les données binaires sont ensuite placées entre les délimiteurs (ce qui se produit pour chaque donnée binaire), puis à la fin de la requête SOAP. Les données binaires sont ensuite envoyées non codées. IIRC, MTOM détermine également si l’envoi en tant que message MIME augmentera la taille de l’appel SOAP et, s’il ne fournit pas de sauvegarde, il l’enverra en tant que message SOAP normal.

Ceci fournit un exemple de ce que le message envoyé sur le fil ressemble.

Autres conseils

Tout commence par le fait que SOAP est XML . Et lorsque vous envoyez autre chose que du texte, par exemple, une image, elle doit être convertie en un type de données qu'un processeur XML peut comprendre.

Sans MTOM, votre image sera convertie en base64Binary et placée en plein milieu de votre enveloppe SOAP. Ce processus de conversion alourdit les données.

  

< tns: data > une très looooooooooooooooooooong chaîne64Binary < / tns: data >

Voici une illustration simple:

entrer la description de l'image ici

Avec MTOM, l'image sera transmise à l'extérieur de l'enveloppe sous la forme d'une pièce jointe MIME . En bref, elle est envoyée en fonction de son type de données d'origine: un fichier jpg, png ou gif. Bien sûr, elles sont toujours transmises sous forme de données binaires, mais cette fois-ci, il n’ya pas de conversion liée à XML, ce qui évite la surcharge de calcul. XOP apparaît dans l’image car c’est celle qui donne l’emplacement de l’image externalisée.

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

Identificateur de contenu: & "SomeUniqueID &";
  Type de contenu: image / png

     

les données binaires d'image ici

Il existe quelques facteurs que les autres réponses ne mentionnent pas. On pourrait penser que la raison pour laquelle MTOM n’est pas utilisée par défaut étant & "Plus rapide &"; que le codage de message texte (Base64). C'est parce que MTOM n'est pas toujours plus rapide. MTOM ne doit être utilisé que sur des transferts de messages volumineux, car il entraîne une surcharge. Pour les messages de petite taille, les performances de MTOM seront inférieures à celles du codage de message texte (Base64).

Si MTOM est utilisé pour les messages volumineux, il est plus rapide que Base64 puisqu'il utilise des données binaires brutes pour le transfert des données. Pour comprendre cela, il faut comprendre le fonctionnement de Base64.

Base64 utilise 6 bits (log2 (64)) pour représenter 1 caractère , ce qui signifie que base64 utilise 4 caractères pour représenter 24 bits ( 3 octets ). Ainsi, si la taille du message est n octets , base64 utilisera 4 * (n / 3) octets pour représenter vos données, ce qui signifie que il sera plus lent de 1 / 3 que MTOM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top