Domanda

MTOM è il meccanismo di ottimizzazione della trasmissione dei messaggi del W3C, un metodo per inviare in modo efficiente dati binari da e verso i servizi web.

Come funziona in generale?

È stato utile?

Soluzione

Se inserisci Wireshark (o abilitato System.Net Logging ) nel servizio non MTOM abilitato, dovresti vedere le richieste SOAP con i dati binari codificati come BASE64. L'invio come BASE64 aumenta la dimensione dei dati binari ma (suppongo) lo rende più interoperabile.

Con MTOM, i messaggi SOAP vengono inviati come messaggi MIME con la codifica BASE64 sostituita con un segnaposto. I dati binari vengono quindi posizionati tra i delimitatori (cosa che accade per ogni pezzo di dati binari) e quindi posizionati alla fine della richiesta SOAP. I dati binari vengono quindi inviati non codificati. IIRC, MTOM determina anche se l'invio come messaggio MIME aumenterà la dimensione della chiamata SOAP e se non fornisce un salvataggio, lo invierà come un normale messaggio SOAP.

Questo fornisce un esempio di cosa assomiglia al messaggio inviato via cavo.

Altri suggerimenti

Tutto inizia con il fatto che SOAP è XML . E quando invii qualcosa di diverso dal testo, ad esempio un'immagine, deve essere convertito in un tipo di dati comprensibile a un processore XML.

Senza MTOM, l'immagine verrà convertita in base64Binary e posizionata al centro della busta SOAP. Questo processo di conversione rende i dati fat.

  

< tns: data > A looooooooooooooooooooooooong base64Binary string < / tns: data >

Ecco una semplice illustrazione:

inserisci qui la descrizione dell'immagine

Con MTOM, l'immagine verrà trasmessa all'esterno la busta come allegato MIME - in breve, viene inviata in base al tipo di dati originale: jpg, png o gif. Ovviamente è ancora trasmesso come dati binari, ma questa volta non esiste alcuna conversione correlata a XML, evitando il sovraccarico computazionale. XOP entra in scena perché è quello che indica la posizione dell'immagine esternalizzata.

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

Content-id: " SomeUniqueID "
  Tipo di contenuto: image / png

     

dati binari immagine qui

Ci sono alcuni fattori che altre risposte non menzionano. Si potrebbe pensare al motivo per cui MTOM non viene utilizzato come predefinito poiché è & Quot; più veloce & Quot; rispetto alla codifica dei messaggi di testo (Base64). È perché MTOM non è sempre più veloce. MTOM dovrebbe essere utilizzato solo su trasferimenti di messaggi di grandi dimensioni perché viene fornito con un overhead. Per piccole dimensioni di messaggi, le prestazioni di MTOM saranno peggiori della codifica dei messaggi di testo (Base64).

Se MTOM viene utilizzato per messaggi di grandi dimensioni, è più veloce di Base64 poiché utilizza il binario non elaborato per il trasferimento dei dati. Per capirlo, si dovrebbe capire come funziona Base64.

Base64 utilizza 6 bit (log2 (64)) per rappresentare 1 carattere il che significa che base64 utilizza 4 caratteri per rappresentare 24 bit ( 3 byte ). Pertanto, se la dimensione del messaggio è n byte , base64 utilizzerà 4 * (n / 3) byte per rappresentare i tuoi dati, il che significa che sarà più lento di 1 / 3 di MTOM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top