最近、私のウェブサイトがクローラーに襲われ、ページを開くのに非常に時間がかかることに気付きました。以前は考えたことがありませんでしたが、今では MVC3 アプリケーションがタイムアウトしないことに気付きました。たとえばThread.Sleep(1000 * 60 * 10)
、コントローラー アクションに (10 分) を入力してページを開くと、10 分後にレンダリング ビューが表示されます。
私はたくさんの記事とSOの質問を読みましたが、運はありません. ローカルホストと「リリース」が構築された運用サーバーの両方で以下のソリューションを試しましたが、それらのどれも私がやりたいことをしませんでした。
解決策 1:
web.config:
<location path="ControllerName/ActionName">
<system.web>
<httpRuntime executionTimeout="1" />
</system.web>
</location>
解決策 2:
コントローラーのアクションで
HttpContext.Server.ScriptTimeout = 1;
私が残した唯一のアイデアは、リクエストが入ってからの経過時間を計算し、それを現在の時間と比較し、それがタイムアウト制限よりも大きい場合は、スローして TimeoutException() を手動で実行することでした。「OnActionExecution」と「OnActionExecuted」に入れる予定でしたが、リクエストがそれらの間のどこかでスタックすると、タイムアウトする必要があるかどうかわかりません。
これを実装するための良い解決策はありますか? MVC3 で動作するようにリクエストのタイムアウトを取得した人はいますか?