2012-04-10 101 views
0

I WCFサービスを使用するASP.NET MVC3ソリューションがあります。このWCFサービスからの企業(2200以上のレコード)のリストを取得すると、エラーが発生しました:受信メッセージの最大メッセージサイズの割り当てがを超えました。受信メッセージの最大メッセージサイズクォータを超えました>> 900000に設定します

理由は、Web.configファイルでです:maxBufferPoolSizeとmaxReceivedMessageSizeは、私が900000に変更し、今、私は何の問題もありません65536でした。

私の質問:maxBufferPoolSizeとmaxReceivedMessageSizeに900000(900k)の値を設定するのはまだ合理的ですか?私は本当にすべての私の記録がデータをページ設定する必要があります。

サブ質問:WCFサービスで直接「改ページ」し、必要なデータページのみを返す方が効率的ですか?それは価値がある?

ありがとうございました。

+0

のためにこれを試してみてくださいあなたは確かにWCF側のページ付けを実装することができます。私はあなたがアクセスできるコードだと思いますか? – Maess

+2

私はこの記事があなたに非常に関連していると思う:http://www.codinghorror.com/blog/2012/03/the-end-of-pagination.html。 本当に2200レコードを表示する必要がありますか?サービスを呼び出す前にいくつかのフィルタリングを許可していれば、ユーザーにとってはそれほど優れていないでしょうか? – mafue

+0

@Maess:はい私はWCFサービスのソースコードにアクセスできます。 – Bronzato

答えて

1

900kメッセージサイズは不合理ではありません。私はそれがあなたに拡張のための余裕を与えることを確認するためにいくつかの小切手を実行することをお勧めします。あなたが4000レコードを持っているときにそれはまだ適合しますか?私は限界として2MBの他の提案を見てきました、あなたはその範囲内です。

代替、あなたのコメントに基づいて、2つのメソッドを提供するために、次のようになります。

GetAllRecords() 
returns all 

GetSomeRecords(int limit) 
returns a subset, plus a count of the total available. 

あなたのクライアントアプリは、ユーザーの好みに基づいて、呼び出すためにどの方法を選択することができます。ユーザーがページを見たい場合は、GetAllRecordsを呼び出してクライアントアプリケーション内でページを設定します。

1

DoS攻撃を回避するには、MaxReceivedMessageSizeを小さく保つ必要があります。サービスがイントラネットのシナリオにある場合、デフォルトよりも大きいことがOKです。公開イントラネット上にある場合は、攻撃の影響とページングを必要とするユーザビリティの影響を比較検討する必要があります。

maxbufferPoolのサイズは、予想される並行要求の数に依存するため、答えにくいです。説明

http://social.msdn.microsoft.com/Forums/en/wcf/thread/d6e234d3-942f-4e9d-8470-32618d3f3212/

+1

+1これは良いアドバイスです。メッセージサイズを小さくすることができれば、そうするべきです。アインシュタインを言い換えれば、できるだけ小さくするべきである。 – mafue

+0

+1アインシュタインを引用する:o) –

関連する問題