私は、MVC 3.0 ASP.net で構築された IIS 7.5 上で、過去 2 か月間正常に動作している Web サイトを管理しています。投稿される JSON が切り詰められて、AJAX POST リクエスト (jQuery を介して起動) が失敗するという問題に直面することがあります。
これまでのところ、そのようなすべてのリクエストで、リクエストの「Content-Length」ヘッダーには、実際にリクエストで取得するよりも多くのデータが含まれていることがわかりました。
すでにweb.config でmaxRequestLengthを 51200 に設定しており、 maxAllowedContentLengthの値にはかなり大きなデフォルト値があると思います (構成では設定していません)。また、「Content-Length」が 7301 (バイト) という低い要求で失敗しましたが、2179 バイトしか取得できませんでした。したがって、これが限界に達しているとは思いません。
問題のあるリクエストのリクエスト ヘッダーは次のとおりです。
- キャッシュ制御: キャッシュなし
- 接続: キープアライブ
- プラグマ: no-cache
- コンテンツの長さ: 7301
- コンテンツ タイプ: アプリケーション/json; charset=utf-8;
- 受け入れる: アプリケーション/json、テキスト/javascript、/ ; q=0.01
- Accept-Encoding: gzip、デフレート
- Accept-Language: en-us,en;q=0.5
- ユーザーエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1
- X-Requested-With: XMLHttpRequest
何か案は ??
更新:コードから問題をさらに分離することができました。JSON 文字列を受け取り、それを逆シリアル化するだけの独立したコントローラーを作成しました。エラーが発生した場合は、エラーをログに記録します。
50 のリクエストのループで 150 の同時スレッドと並行してこのコントローラーをヒットすると、このコントローラーが受け取る JSON が切り捨てられるいくつかのエラーが発生します。現在、IIS の最適化と、関連する可能性のあるさまざまなパラメーターの詳細を読むことに重点を置いています (現在、IIS の既定のパラメーターを使用して実行しています)。
150 の同時接続は大したことではないと強く感じており、いくつかのパラメーターを調整してこの問題を乗り越えることができることを心から望んでいます。この問題を乗り越えたら、私の発見を共有します。
*更新 2 (10 月 8 日) * : 問題をさらに絞り込みました。IIS でエラー ログを有効にしたところ、データの読み取り中に失敗した要求で次のエラーが発生することがわかりました。
BytesReceived = 0
ErrorCode = 2147943395
Error Description = "The I/O operation has been aborted because of either a thread exit or an application request.(0x800703e3)"
iis フォーラムでこのエラーに関する情報を見つけていますが、(複数の) 提案が与えられていることをまだ実験していません。次のリンクは、これについてさらに検索するための良い出発点になる可能性があります