【WCF】【C#】WCF ~ メッセージ転送モード ~

■ メッセージ転送モード

【1】バッファ ←デフォルト
【2】ストリーミング
http://msdn.microsoft.com/ja-jp/library/system.servicemodel.transfermode(v=vs.80).aspx

【1】バッファ転送モード

 * 既定のバッファ転送モードでは、受信側がメッセージを読むためにはメッセージを完全に送信する必要がある
 * 転送が完了するまで、メッセージ全体をメモリ バッファ内に保持する

【2】ストリーミング転送モード

 * メッセージ ヘッダだけをバッファし、メッセージ本体をストリームとして公開し、一部分を読み取ることができる
 * ストリーミング転送モードでは、メッセージを完全に送信しなくても、受信側がメッセージの処理を開始できます。
 * ストリーミング モードは、渡される情報が長い場合、または連続的に処理する場合に役立ちます。
 * ストリーミング モードは、メッセージが大きすぎてすべてをバッファできない場合にも役立ちます。
 * 大量のデータが受信されたり返されたりする場合、このデータをストリーミングして、
   入力または出力メッセージのバッファによりメモリの使用率が高くなるのを回避することを検討してください。
TransferMode
[[http://msdn.microsoft.com/ja-jp/library/ms751463(VS.85).aspx]]

■ サンプル

[ServiceContract(Namespace="http://localhost:XXXX")]
public interface ISample
{
    [OperationContract]
    Stream GetStreamData(string terget);
}
Streamの扱い方については、以下を参照のこと
https://blogs.yahoo.co.jp/dk521123/29113938.html

■ 注意事項

http://msdn.microsoft.com/ja-jp/library/ms733742.aspx
より抜粋

データ コントラクト内では System.IO.Stream の派生型を使用しないでください。
ストリーム データは、次の「データのストリーミング」で説明するストリーミング モデルを使用して
送受信する必要があります。

# データ コントラクト(DataContract) であって、
# サービス コントラクト(ServiceContract) ではないってこと(?) 

関連記事

WCF

WCF ~ 基礎知識編 ~
https://blogs.yahoo.co.jp/dk521123/22254537.html
WCF ~大規模データを扱うには~
http://blogs.yahoo.co.jp/dk521123/29123383.html