長いASP.NET操作でのIIS要求タイムアウト


87

長い操作を実行すると、IISからの要求のタイムアウトが発生します。舞台裏では、ASP.NETアプリケーションがデータを処理していますが、処理されるレコードの数が多いため、操作に時間がかかります。

ただし、IISはセッションをタイムアウトすると思います。これはIISまたはASP.NETセッションの問題ですか?

前もって感謝します

回答:


146

ASP.NETスクリプトの実行に許可される時間を延長する場合は、Server.ScriptTimeout値を増やします。デフォルトは、.NET 1.xの場合は90秒、.NET2.0以降の場合は110秒です。

例えば:

// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;

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

<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300" 
  ... other configuration attributes ...
/>

ここに画像の説明を入力してください

MSDNのドキュメントによると注意してください:

「このタイムアウトは、コンパイル要素のdebug属性がFalseの場合にのみ適用されます。したがって、debug属性がTrueの場合、デバッグ中のアプリケーションのシャットダウンを回避するために、この属性を大きな値に設定する必要はありません。 「」

すでにこれを行っているが、セッションの有効期限が切れていることに気付いた場合は、ASP.NETを増やしてください HttpSessionState.Timeout値をます。

例えば:

// Increase session timeout to thirty minutes
Session.Timeout = 30;

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

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

スクリプトの実行に数分かかり、同時ユーザーが多い場合は、ページを非同期ページに変更することを検討してください。これにより、アプリケーションのスケーラビリティが向上します。

サーバーへの管理者アクセス権がある場合のもう1つの方法は、この長時間実行される操作を、スケジュールされたタスクまたはWindowsサービスとして実装する候補と見なすことです。


参考までにhttpRuntimeexecutionTimeoutは秒単位であり、大文字のTはありません
Andrew Rimmer

7
このタイムアウト値を使用するには、デバッグモードがfalseに設定されていることに注意することも重要です。<system.web> <compilation debug = "false" targetFramework = "4.0" /> </ system.web>
Jesseローパー

@JesseRoperそれに関するドキュメントを教えていただければ、それを回答に含めていただければ幸いです。または、回答を直接編集することもできます。タ。
Kev 2012年

デフォルトのexecutionTimeout値は110秒です。
frattaro 2015

20

@Kevによる素晴らしく徹底的な回答!

WebFormsアプリケーションの1つの管理ページでのみ長い処理を行ったため、コードオプションを使用しました。しかし、本番環境で一時的にすばやく修正できるようにするために、<location>web.configのタグで構成バージョンを使用しました。このようにして、私の管理/処理ページは十分な時間を確保しましたが、エンドユーザー向けのページなどは以前のタイムアウト動作を維持していました。

以下に、同じクイックフィックスが必要なGoogle社員向けの設定を示しました。あなたはofcourseの私の「4時間」の例以外の値を使用しますが、必要があるDOのセッションは、そのノートtimeOutの要求は一方で、数分であるexecutionTimeout秒であります!

そして、-すでに2015年なので-クイックフィックス以外の場合は、KEVが2010年に回答したときに最先端であった.NET 2.0のASYNCページの代わりに、可能であれば.Net4.5のasync / awaitを使用する必要があります。 :)。

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>

web.configに「location」スニペットを含めましたが、機能していません。「executionTimeout」のみを使用しています。「sessionState」は必要ありません。他の何かを構成する必要がありますか?NET4.0を使用しています。「system.web」で「httpRuntime」を直接使用すると、すべてのページでタイムアウトが正しく適用されます。
オリバー

11

私はそれに3時間と4時間ほど費やしたので、これをここに投稿します、そして私は上記のような答えを見つけただけです、それは追加しますexecutionTime、しかしそれはその場合の問題を解決しませんASP .NETCoreを使用しています。それのために、これはうまくいくでしょう:

web.configファイルで、ノードにrequestTimeout属性を追加しaspNetCoreます。

<system.webServer>
  <aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>

この例では、値を10分間に設定しています。

参照:https//docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module


これはOutOfProcessホスティングモデルにのみ適用されます。以下のためのInProcessタイムアウト設定がありません。IISはプロセスが完了するのを待ち続けます。ここを参照してください:github.com/dotnet/AspNetCore.Docs/issues/16870
Rosdi Kasim

-9

~場所の文字を削除して

path="~/Admin/SomePage.aspx"

になります

path="Admin/SomePage.aspx"

それは質問に答えるしない
イゴール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.