MTOM は W3C Message Transmission Optimization Mechanism であり、バイナリ データを Web サービスとの間で効率的に送受信する方法です。
一般的にはどのように機能しますか?
すべては、SOAP がXMLであるという事実から始まります。また、画像など、テキスト以外のものを送信する場合は、XML プロセッサが理解できるデータ型に変換する必要があります。
MTOM がなければ、画像はbase64Binaryに変換され、SOAP エンベロープの真ん中に置かれます。この変換プロセスにより、データが太くなります。
<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"
コンテンツ タイプ: 画像/png画像のバイナリデータはこちら
Wireshark (または有効なSystem.Net Logging ) を非 MTOM 対応サービスに配置すると、バイナリ データが BASE64 としてエンコードされた SOAP 要求が表示されます。BASE64 として送信すると、バイナリ データのサイズが大きくなりますが、相互運用性が向上すると思います。
MTOM を使用すると、SOAP メッセージは MIME メッセージとして送信され、BASE64 エンコードがプレースホルダーに置き換えられます。バイナリ データは区切り文字の間に配置され (バイナリ データの各部分に対して発生します)、SOAP 要求の最後に配置されます。その後、バイナリ データはエンコードされずに送信されます。IIRC、MTOM は、MIME メッセージとして送信すると SOAP 呼び出しのサイズが大きくなるかどうかも判断し、節約できない場合は、通常の SOAP メッセージとして送信します。
これは、回線を介して送信されるメッセージがどのように見えるかの例を提供します。