ASP.NET アプリケーションで DataAdapter メソッドを使用すると、要求のタイムアウト エラーが発生しました

この記事は、ASP.NET Web アプリケーションでエラー (タイムアウト要求) が発生する問題を解決するのに役立ちます。

元の製品バージョン: ASP.NET
元の KB 番号: 825739

現象

メソッドを DataAdapter.Fill 使用するか、処理に 90 秒以上かかる ASP.NET Web アプリケーションでクエリを実行すると、次のエラー メッセージが表示される場合があります。

HttpException (0x80004005): 要求がタイムアウトしました。

このエラーは、Web アプリケーションをリリース モードで実行し、web.config ファイル内の属性のDebug値が false に設定されている場合にのみ発生します

原因

既定では、属性の executionTimeout 値は 、Machine.config ファイルで 90 秒に設定されます。 このエラーは、処理時間が 90 秒を超えたときに発生します。

回避策

この問題を回避するには、構成ファイルの属性に設定 executionTimeout されているタイムアウト値を増やします。

属性はexecutionTimeoutMachine.config ファイルの の下<httpRequest>に存在します。 これらの設定は、 web.config ファイルまたは Machine.config ファイルで変更できます。 タイムアウトの既定値は 90 秒です。 属性は executionTimeout 、ASP.NET Web アプリケーションによってシャットダウンされるまでの要求の実行が許可される最大秒数を示します。

方法 1: Web.config ファイルで ExecutionTimeout 属性値を設定する

  1. メモ帳で web.config ファイルを開きます。

  2. セクションに <httpRuntime> 要素を <system.web> 次のように追加します。

    <configuration>
        <system.web>
            <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
        </system.web>
    </configuration>
    
  3. タイムアウト エラーを回避するために、 executionTimeout 属性の値を変更します。

  4. web.config ファイルを保存します。

方法 2: Machine.config ファイルで ExecutionTimeout 属性値を設定する

  1. メモ帳で Machine.config ファイルを開きます。 Machine.config ファイルはディレクトリにあります%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\

  2. Machine.config ファイルで、 要素を<httpRuntime>見つけます。 web.config ファイルは Web アプリケーション ディレクトリにあります。

    <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
    minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
    
  3. タイムアウト エラーを回避するために、 executionTimeout 属性の値を変更します。

  4. Machine.config ファイルを保存します。

状態

この動作は仕様です。

動作の再現手順

  1. Microsoft Visual Studio .NET を起動します。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] を選択します。

  3. [プロジェクトの種類] で [Visual Basic プロジェクト] を選択し、[テンプレート] で [ASP.NET Web アプリケーション] を選択します。 既定では、 WebForm1.aspx が作成されます。

  4. [デザイン] ビューで[ WebForm1] を右クリックし、[ コードの表示] を選択します。

  5. データベース接続と DataAdapter データセットを埋めるメソッドを追加するには、既存のコードを次のコードに置き換えます。

    Imports System.Data.SqlClient
    Public Class WebForm1
       Inherits System.Web.UI.Page
    
       Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          Try
             Dim sConnectionString As String
             sConnectionString = "server=servername;uid=sa;pwd=password;database=testdatabase;"
             Dim objConn As SqlConnection
             objConn = New SqlConnection(sConnectionString)
             objConn.Open()
    
             Dim daAuthors As SqlDataAdapter
    
             'Increase the no.of records from existing value, if execution time is less than 90 sec.
             daAuthors = New SqlDataAdapter("Select top 60000 * From timelog (nolock)", objConn)
             Dim myDs As DataSet
             myDs = New DataSet("testTimelog")
             Dim dt As DateTime
             dt = New DateTime()
             dt = dt.Now
             Response.Write("StartTime of DataAdapter fill - " + dt)
             daAuthors.Fill(myDs, "testTimelog")
    
             dt = New DateTime()
             dt = dt.Now
             Response.Write("<br>EndTime of DataAdapter fill - " + dt)
             Response.Write("<br>No of Rows = " + myDs.Tables(0).Rows.Count.ToString())
    
          Catch ex As Exception
             Response.Write(ex.ToString())
          End Try
       End Sub
    End Class
    
  6. メモ帳で web.config ファイルを開き、次のように属性の値を Debugfalse に設定します。

    <configuration>
        <system.web>
            <compilation defaultLanguage="vb" debug="false" />
        </system.web>
    </configuration>
    
  7. リリース モードでビルドするようにアプリケーションを設定します。 これを行うには、次の手順を実行します。

    1. ソリューション エクスプローラーで、プロジェクトを右クリックします。
    2. [プロパティ] を選択し、[Configuration Manager] を選択します。
    3. [Active Solution Configuration]\(アクティブ ソリューション構成\) で [リリース] を選択し、[閉じる] を選択します。
    4. [OK] を選択します。
  8. [ デバッグ ] メニューの [ 開始 ] を選択して、プロジェクトをビルドして実行します。 [現象] セクションで説明されているエラー メッセージ 表示される場合があります。

注:

Machine.config ファイルに設定されているタイムアウトの既定値は 90 秒です。 処理時間が 90 秒未満の場合は、フェッチするレコードの数を増やすことで処理時間を増やします。

関連情報