6

私は、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 フォーラムでこのエラーに関する情報を見つけていますが、(複数の) 提案が与えられていることをまだ実験していません。次のリンクは、これについてさらに検索するための良い出発点になる可能性があります

http://forums.iis.net/p/1149787/1917288.aspx

4

1 に答える 1

1

ようやく原因と解決策がわかりました。残念ながら、すべての環境に適用できるわけではありませんが、運用環境には役立ちます。詳細は以下をご覧ください

これは、Windows 2008 R2 のバグが原因であることが判明しました。これにより、asp.net は、クライアントが切断されていない場合でも、切断されたと認識してしまいます。同じホットフィックスが利用可能で、http://support.microsoft.com/kb/977453にあります。この修正は、既に Windows 2008 R2 SP1 に含まれています (ここから入手できます)。

ホットフィックスは、Windows 2008 R2 を実行している 1 つの環境では機能しましたが、SP1 を適用した Windows 2008 R2 には適用できません。残念ながら、この問題は SP1 を実行している環境でも再現でき、未解決のままです。この問題については、IIS フォーラム ( http://forums.iis.net/t/1192310.aspx ) で新しいケースをオープンしており、代わりにそこで追跡します。

この問題の詳細については、http://forums.iis.net/p/1149787/1917288.aspxのスレッドを参照してください。

于 2012-10-11T05:20:11.573 に答える