0

asp.netmvcアプリケーションを構築しています。私のアプリケーションには、いくつかの重い操作を実行できるダッシュボードがあります。また、サーバーからアクションのステータスを取得しようとして、さまざまなポーリング要求を実行する別のjqueryメソッドがあります。

何らかの理由で、コントローラーのステータスアクションがタイムアウトし続けます。重い操作全体が完了した場合にのみ、ステータスアクションは値を返します。いくつかのトレースを追加しようとしましたが、サーバーが要求を処理しているように見えますが、何らかの理由で有効な応答が行われていません。

何が原因でしょうか?

4

1 に答える 1

0

ASP.NETには110秒のデフォルトの実行タイムアウトがあります。これは、次の要素によって制御されます。

<httpRuntime executionTimeout="110" />

操作にこのデフォルトのタイムアウトよりも長い時間がかかる場合、ASP.NETは単にそれを停止します。デフォルト値を増やしてみることができますが、ASP.NETで長時間実行される操作を行うと、この操作の実行中に貴重な作業スレッドが危険にさらされ、ASP.NETアプリケーションの提供機能が低下するため、悲惨な結果になる可能性があることに注意してください。

また、この操作でSQLクエリを実行している場合は、長いクエリがある場合にヒットする可能性のあるSqlConnectionおよびSqlCommandに関連する他のタイムアウトがある可能性があることに注意してください。

注意すべきもう1つの点は、ASP.NETセッションはスレッドセーフではないという事実です。これは、同じASP.NETセッションに対して2つの並列要求がある場合、それらは並列ではなく順次シリアル化および実行されることを意味します。仕様によるものです。したがって、アクションでセッションを使用している場合、現在実行中のコントローラーアクションがあり、そのセッションを使用している場合、同じセッションからの別の要求は、実行される前にそれが終了するのを待つ必要があります。

于 2013-02-03T16:17:35.580 に答える