■ 概要
* 既存のシステムでは、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