0

WCF サービスを使用した ASP.NET MVC3 ソリューションがあります。この WCF サービスから会社のリスト (2200 を超えるレコード) を取得すると、次のエラーが表示されました:受信メッセージの最大メッセージ サイズ クォータを超えました。

その理由はWeb.Config ファイルにあります。maxBufferPoolSize と maxReceivedMessageSize は 65536 でした。900000 に変更したところ、問題はなくなりました。

私の質問: maxBufferPoolSize と maxReceivedMessageSize の値を 900000 (900k) にすることはまだ妥当ですか? データを改ページするには、すべてのレコードが本当に必要です。

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

ご協力いただきありがとうございます。

4

2 に答える 2

1

DoS 攻撃を回避するには、MaxReceivedMessageSize を小さく保つ必要があります。サービスがイントラネット シナリオにある場合は、既定より大きくても問題ありません。パブリック イントラネット上にある場合は、攻撃の影響と、ページングが必要な場合のユーザビリティへの影響を比較検討する必要があります。

maxbufferPool サイズは、予想される同時リクエストの数に依存するため、回答がより困難です。説明のためにこれを試してください

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

于 2012-04-10T19:37:54.047 に答える
1

900k のメッセージ サイズは不当ではありません。いくつかのチェックを実行して、拡張の余地があることを確認することをお勧めします。4000 件のレコードがある場合でも収まりますか? 制限として 2MB の他の提案を見たので、十分にその範囲内です。

あなたのコメントに基づく別の方法は、次の2つの方法を提供することです。

GetAllRecords()
returns all

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

クライアント アプリは、ユーザーの好みに基づいて、呼び出すメソッドを選択できます。ユーザーがページを表示したい場合は、クライアント アプリ内で GetAllRecords を呼び出してページネーションを行います。

于 2012-04-10T18:14:32.730 に答える