web-dev-qa-db-ja.com

MTOMはどのように機能しますか?

MTOMは、Webサービスとの間でバイナリデータを効率的に送信する方法であるW3Cメッセージ送信最適化メカニズムです。

一般的にどのように機能しますか?

64
Brian R. Bondy

非MTOM対応サービスに Wireshark (または有効化 System.Net Logging )を配置すると、SOAP= BASE64としてエンコードされたバイナリデータ。BASE64として送信すると、バイナリデータのサイズが大きくなりますが、相互運用性が向上します(と思われます)。

MTOMでは、SOAPメッセージはMIMEメッセージとして送信され、BASE64エンコードがプレースホルダーに置き換えられます。その後、バイナリデータは区切り文字の間に配置されます(バイナリデータごとに発生します)。次に、SOAPリクエストの最後に置かれます。バイナリデータはエンコードされずに送信されます。IIRC、MTOMは、MIMEメッセージとして送信するとSOAP呼び出し。保存を提供しない場合、通常のSOAP=メッセージとして送信します。

This は、ワイヤを介して送信されたメッセージがどのように見えるかの例を提供します。

48

すべては、SOAPが[〜#〜] xml [〜#〜]であるという事実から始まります。たとえば、テキスト以外の何かを送信する場合、画像-XMLプロセッサが理解できるデータ型に変換する必要があります。

MTOMを使用しない場合、イメージはbase64Binaryに変換され、SOAPエンベロープの中央にスマックが配置されます。この変換プロセスによりデータが太くなります。

<tns:data> base64Binary文字列に非常に近いooooooooooooooooooooooooo </ tns:data>

以下に簡単な図を示します。

enter image description here

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

ここにバイナリデータを画像化する

147
Jops

他の答えが言及していないいくつかの要因があります。 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より。

8
sotn