C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/01/18 21:23
WCFによるWebサービスでは、バイナリデータのエンコーディング形式にBase64BinaryかMTOM ( SOAP Message Transmission Optimization Mechanism ) のどちらかを選択することができます。


[ Base64Binary と MTOM ]
Base64Binaryでは、バイナリデータを文字列へとエンコードしますが、エンコード・デコードに時間がかかる上にサイズも増加し、結果としてパフォーマンスダウンに繋がるという問題があります。
この問題を解消するために登場したのがMTOMです。MTOMを使用することで、エンコード・デコードの所要時間が短縮され、データサイズも抑えられます。


[ 設定方法 ]
WCFによるWebサービスでは、既定でBase64Binaryが使用されます。MTOMを使用する場合は、Web.configのバインディングセットの設定を次のように変更します。
WsHttpBindingの場合の設定例を以下に示します。

<system.serviceModel>
    <services>
        <service name="Service1">
            <endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IService1" contract="IService1" />
        </service>
    </services>
    <bindings>
        <wsHttpBinding>
            <binding name="wsHttpBinding_IService1" messageEncoding="Mtom" />
        </wsHttpBinding>
    </bindings>
</system.serviceModel>


[ ちなみに・・・ ]
以下の資料やページを見ると、BasicHttpBindingバインディングセットではMTOMエンコーディングを利用できないと書いてありますが、これは間違いですので注意してください。BasicHttpBindingバインディングセットでもMTOMエンコーディングを利用することは可能です。 ( 実際にSOAPメッセージを調べて確認しました。 )

[コース: C2] .NET Framework 3.0 WCF/WF アプリケーション開発 ( PowerPoint )
WCFの基本的な概念 - @IT
タグ: .NET C# WCF


Basic Profile 1.1にMTOMは含まれていないはずなので、むしろBasicHttpBindingでMTOMが利用できちゃうことのほうが問題な気がします。

2008.01.06 12:39 URL | null #- [ 編集 ]


確かに、おっしゃる通りでした。
調べてみた所、こんなページを見つけました。

http://msdn2.microsoft.com/ja-jp/library/ms733080.aspx

一応、Basic Profile 1.1 では実現できないことは承知の上でのサポートのようです。

2008.01.06 13:20 URL | よこけん #Ay6tTHf6 [ 編集 ]












トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/82-4118bb2a

2007-02-06
WCFの日本語解説で今のところ一番まともなのは(残念ながら)@ITにあるものだと思っていた。が、多少は間違っているようだ。 http://csharper.blog57.fc2.com/blog-entry-82.html 確かにBasicHttpBindingでもMTOMは使える。(BasicHttpBinding.MessageEncoding = WSMessage

2007.02.06 16:25 | ものがたり