MTOMは、Webサービスとの間でバイナリデータを効率的に送信する方法であるW3Cメッセージ送信最適化メカニズムです。
一般的にどのように機能しますか?
非MTOM対応サービスに Wireshark (または有効化 System.Net Logging )を配置すると、SOAP= BASE64としてエンコードされたバイナリデータ。BASE64として送信すると、バイナリデータのサイズが大きくなりますが、相互運用性が向上します(と思われます)。
MTOMでは、SOAPメッセージはMIMEメッセージとして送信され、BASE64エンコードがプレースホルダーに置き換えられます。その後、バイナリデータは区切り文字の間に配置されます(バイナリデータごとに発生します)。次に、SOAPリクエストの最後に置かれます。バイナリデータはエンコードされずに送信されます。IIRC、MTOMは、MIMEメッセージとして送信するとSOAP呼び出し。保存を提供しない場合、通常のSOAP=メッセージとして送信します。
This は、ワイヤを介して送信されたメッセージがどのように見えるかの例を提供します。
すべては、SOAPが[〜#〜] xml [〜#〜]であるという事実から始まります。たとえば、テキスト以外の何かを送信する場合、画像-XMLプロセッサが理解できるデータ型に変換する必要があります。
MTOMを使用しない場合、イメージはbase64Binaryに変換され、SOAPエンベロープの中央にスマックが配置されます。この変換プロセスによりデータが太くなります。
<tns:data> base64Binary文字列に非常に近いooooooooooooooooooooooooo </ tns:data>
以下に簡単な図を示します。
MTOMを使用すると、画像は送信されます外部エンベロープはMIME添付ファイル-つまり、元のデータ型(jpg、png、またはgif)に従って送信されます。もちろん、バイナリデータとして送信されますが、今回はXML関連の変換はなく、計算のオーバーヘッドを回避します。 XOPは、外部化された画像の場所を提供するものであるため、図に登場します。
<soap:Envelope>
<soap:Body>
<tns:data>
<xop:include href="SomeUniqueID-ThatLeadsToTheImage"/>
</tns:data>
</soap:Body>
</soap:Envelope>
コンテンツID:「SomeUniqueID」
Content-Type:image/pngここにバイナリデータを画像化する
他の答えが言及していないいくつかの要因があります。 MTOMは、テキストメッセージエンコーディング(Base64)よりも "faster"であるため、デフォルトとして使用されない理由を考えるかもしれません。 MTOMは常に高速ではないためです。 MTOMはオーバーヘッドを伴うため、大きなメッセージ転送でのみ使用する必要があります。メッセージのサイズが小さい場合、MTOMのパフォーマンスはテキストメッセージエンコーディング(Base64)よりも低下します。
MTOMが大きなメッセージに使用される場合、データ転送に生のバイナリを使用するため、Base64よりも高速です。それを理解するには、Base64の仕組みを理解する必要があります。
Base64は6ビット(log2(64))を使用して1文字を表します。つまり、base64は4文字を使用して24ビットを表します(バイト)。したがって、メッセージサイズがnバイトの場合、base64は4 *(n/3)バイトを使用してデータを表します。つまり、1ずつ遅くなります)/ MTOMより。