[ Base64Binary と MTOM ]
Base64Binaryでは、バイナリデータを文字列へとエンコードしますが、エンコード・デコードに時間がかかる上にサイズも増加し、結果としてパフォーマンスダウンに繋がるという問題があります。
この問題を解消するために登場したのがMTOMです。MTOMを使用することで、エンコード・デコードの所要時間が短縮され、データサイズも抑えられます。
[ 設定方法 ]
WCFによるWebサービスでは、既定でBase64Binaryが使用されます。MTOMを使用する場合は、Web.configのバインディングセットの設定を次のように変更します。
- 使用するバインディングセットがBasicHttpBindingなら、[ system.serviceModel ] - [ bindings ] - [ basicHttpBinding ] セクションの子要素である [ binding ] セクションの、messageEncoding属性の値を "Mtom" に設定します。
- 使用するバインディングセットがWsHttpBindingなら、[ system.serviceModel ] - [ bindings ] - [ wsHttpBinding ] セクションの子要素である [ binding ] セクションの、messageEncoding属性の値を "Mtom" に設定します。
- 使用するバインディングセットがWsDualHttpBindingなら、[ system.serviceModel ] - [ bindings ] - [ wsDualHttpBinding ] セクションの子要素である [ binding ] セクションの、messageEncoding属性の値を "Mtom" に設定します。
<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
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 | ものがたり