0

最近、私のウェブサイトがクローラーに襲われ、ページを開くのに非常に時間がかかることに気付きました。以前は考えたことがありませんでしたが、今では 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 で動作するようにリクエストのタイムアウトを取得した人はいますか?

4

2 に答える 2

1

ここでは、タイムアウトが実際の問題ではないと思います。あなたのサイトがセッション ロックの問題に直面している可能性が非常に強いのではないかと思います。デフォルトでセッションを無効にするか、読み取り専用としてマークし、セッションが変更されたアクション(たとえば、ログインコントローラーなど)でのみ有効にしてください。詳細SessionStateAttributeについては、を参照してください。

于 2012-12-14T19:47:03.237 に答える
-1

ここでの良い答え: 長いASP.NET操作でのIIS要求タイムアウト

すでにこれを実行しているが、セッションの有効期限が切れていることがわかった場合は、ASP.NETHttpSessionState.Timeout値を増やします。

例えば:

// Increase session timout to thirty minutes
Session.Timout = 30;

この値は、sessionState構成要素のweb.configファイルで構成することもできます。

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>
于 2012-12-15T04:47:17.387 に答える