次の方法で共有


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 属性に設定されているタイムアウト値を増やします。

executionTimeout属性は、machine.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 を起動します。

  2. [ファイル] メニューで、 [新規作成]>[プロジェクト] の順に選択します

  3. [すべての言語>Windowsの下にある Visual BasicASP.NET 選択すべてのプラットフォーム>Web の下にある すべてのプロジェクトの種類テンプレートの一覧で [Web アプリケーション (.NET Framework)]を選択し、プロジェクト作成ページで Web フォームを選択します。 既定では、WebForm1.aspx が作成されます。

  4. ソリューション エクスプローラーWebForm1.aspxを右クリックし、[コードの表示] 選択

  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 ファイルを開き、次のように Debug 属性の値を false に設定します

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

    1. ソリューション エクスプローラーで、プロジェクトを右クリックします。
    2. Propertiesを選択し、Configuration Manager を選択します。
    3. [アクティブなソリューションの構成]の下にある [Releaseを選択し、Close を選択します。
    4. [OK] を選択します。
  8. Debug メニューの Start を選択して、プロジェクトをビルドして実行します。 Symptoms セクションで説明されているエラー メッセージが表示されることがあります。

Note

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

関連情報