質問

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

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

役に立ちましたか?

解決

Wireshark を配置した場合(または System.Net Logging )では、非MTOM対応サービスで、次のようにエンコードされたバイナリデータを含むSOAPリクエストが表示されます。 BASE64。 BASE64として送信すると、バイナリデータのサイズは大きくなりますが、(相互運用性が向上すると思います)。

MTOMを使用すると、SOAPメッセージは、プレースホルダーに置き換えられたBASE64エンコーディングでMIMEメッセージとして送信されます。次に、バイナリデータは区切り文字の間に配置され(各バイナリデータに対して発生します)、SOAP要求の最後に配置されます。バイナリデータはエンコードされずに送信されます。 IIRC、MTOMは、MIMEメッセージとして送信するとSOAP呼び出しのサイズが増加するかどうかも判断し、保存しない場合は通常のSOAPメッセージとして送信します。

これは何の例を提供します有線で送信されるメッセージは次のようになります。

他のヒント

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

MTOMを使用しない場合、画像は base64Binary に変換され、SOAPエンベロープの中央にスナックが配置されます。この変換プロセスはデータを太らせます。

  

<!> lt; tns:data <!> gt; base64Binary文字列<!> lt; / tns:data <!> gt;

簡単な図を次に示します。

ここに画像の説明を入力

MTOMを使用すると、画像は MIME添付としてエンベロープの外部に送信されます。要するに、元のデータ型:jpg、png、またはgif。もちろん、バイナリデータとして送信されますが、今回はXML関連の変換はなく、計算のオーバーヘッドを回避します。 XOPは、外部化されたイメージの場所を提供するものであるため、写真に登場します。

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

Content-id:<!> quot; SomeUniqueID <!> quot;
  コンテンツタイプ:image / png

     

画像のバイナリデータはこちら

他の回答では言及されていない要因がいくつかあります。 MTOMは、テキストメッセージエンコーディング(Base64)よりも <!> quot; fast <<> quot; であるため、デフォルトとして使用されない理由を考えるかもしれません。 MTOMは常に高速ではないためです。 MTOMはオーバーヘッドを伴うため、大きなメッセージ転送でのみ使用する必要があります。メッセージのサイズが小さい場合、MTOMのパフォーマンスはテキストメッセージエンコーディング(Base64)よりも低下します。

MTOMが大きなメッセージに使用される場合、データ転送に生のバイナリを使用するため、Base64よりも高速です。それを理解するには、Base64の仕組みを理解する必要があります。

Base64は 6ビット(log2(64))を使用して 1文字を表します。つまり、base64は24ビット( 4文字 3バイト)。したがって、メッセージサイズが nバイトの場合、base64は 4 *(n / 3)バイトを使用してデータを表します。つまり、 1 / 3 MTOMより。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top