【WCF】【C#】WCF ~ 大規模データを扱うには ~

■ 概要

 * 既存のシステムでは、classを返していたのだが、大量なデータをやり取りすると、
  タイムアウトの例外が発生し(ここまでは、まだいい)、 Faulted の状態になってしまい、
   以降復帰ができなくなった。
 => Streamでやり取りすると良かった。(多分、以下が関連)
http://msdn.microsoft.com/ja-jp/library/ms733742.aspx
 * なお、Faulted の状態の後に、Abort()をしても復帰していなかった。(以下を参照のこと)
http://blogs.yahoo.co.jp/dk521123/29097175.html

■ 解決案

【1】 転送モード「ストリーミング」を使う

 *  詳細は以下。
https://blogs.yahoo.co.jp/dk521123/30301263.html

【2】送受信受信可能な最大サイズを増やす

http://yiaowang.web.fc2.com/programing/vs_tips/wcf_01.html
 * MaxReceivedMessageSize プロパティを調整する
 * maxRequestLength プロパティを調整する
 * <httpRuntime> 要素の maxAllowedContentLength プロパティを調整する
MaxReceivedMessageSize
http://msdn.microsoft.com/ja-jp/library/system.servicemodel.basichttpbinding.aspx
より抜粋

受信可能な最大メッセージ サイズを取得または設定します。
maxRequestLength
http://msdn.microsoft.com/ja-jp/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.80).aspx
より抜粋

最大要求サイズを取得または設定します。
maxAllowedContentLength
http://technet.microsoft.com/ja-jp/library/cc754791.aspx
より抜粋

コンテンツの最大許容長の値を構成する

# 後、以下にも情報あり。
http://msdn.microsoft.com/ja-jp/library/ff487005(v=sql.105).aspx

■ 注意点

 * ただ闇雲にサイズを増やせばいいってものではない。
 →受信メッセージを制限することにより、サービス拒否攻撃(Dos)を防止できる★重要★
 →セキュリティの観点から言えば、制限することも必要

  なお、データの制限については、以下を参照のこと。
http://csharper.blog57.fc2.com/blog-entry-86.html

参考文献

今後参考になりそうなサイト

http://handcraft.blogsite.org/ComponentGeek/ShowArticle/39.aspx

関連記事

WCF

WCF ~ 基礎知識編 ~
https://blogs.yahoo.co.jp/dk521123/22254537.html