1

誰かがこれについていくつかの光を当てることができれば、私は感謝しています:

Mtom 経由でバイナリ データをサービスにアップロードしたいと考えています。

エンドポイントバインディングを次のように構成すると:

<wsHttpBinding>
    <binding name="WsHttpMtomBinding" messageEncoding="Mtom" />

Mtom は動作します - バイナリ コンテンツが Mtom で送信されていることを Fiddler で確認できます。

私がそれを設定した場合:

 <basicHttpBinding>
    <binding name="WsHttpMtomBinding" messageEncoding="Mtom" />

送信されたものをFiddlerで見ると、base64でエンコードされます。

メッセージのサイズが特定のサイズよりも小さい場合、WCF は base64 エンコーディングを行うことを読みました。バイナリ コンテンツが十分な大きさであることを確認しました。サービスは自分の管理下にないため、basicHttpBinding を使用する必要があります。

base64でエンコードされているのはなぜですか?

4

1 に答える 1

4

問題が見つかりました: 問題は、提供された WSDL でした。WSDL のタイプが、Base64Binary ではなく HexBinary に設定されていました。WCF は、base64 のみを認識して MTOM で最適化します。その上、バイナリ データが 1024 バイト未満の場合、MTOM は使用されません。(ただし、メッセージのヘッダーには、MTOM であることが示されます)

MSDN からの抜粋: 「MTOM の目的は、SOAP メッセージをエンコードして、base64 でエンコードされたデータを最適化することです。以下は、制約のリストです: R4151: base64 でエンコードされたデータを含むすべての要素情報項目が最適化される可能性があります。

B4152: WCF は、base64 でエンコードされたデータを含み、長さが 1024 バイトを超える要素情報項目を最適化します。"

これが誰かに役立つことを願っています。これを理解するのに何時間もかかりました。

于 2013-03-09T16:50:54.720 に答える