この記事は、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 属性値を設定する
メモ帳で web.config ファイルを開きます。
次のように、
<httpRuntime>
要素を<system.web>
セクションに追加します。<configuration> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> </configuration>
タイムアウト エラーを回避するために、
executionTimeout
属性の値を変更します。web.config ファイルを保存します。
方法 2: machine.config ファイルで executionTimeout 属性値を設定する
メモ帳で machine.config ファイルを開きます。 machine.config ファイルは、
%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\
ディレクトリにあります。machine.config ファイルで、
<httpRuntime>
要素を見つけます。 web.config ファイルは Web アプリケーション ディレクトリにあります。<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
タイムアウト エラーを回避するために、
executionTimeout
属性の値を変更します。machine.config ファイルを保存します。
状態
この動作は仕様によるものです。
動作を再現する手順
Microsoft Visual Studio を起動します。
[ファイル] メニューで、 [新規作成]>[プロジェクト] の順に選択します
[すべての言語>Windowsの下にある Visual Basic を ASP.NET 選択すべてのプラットフォーム>Web の下にある すべてのプロジェクトの種類テンプレートの一覧で [Web アプリケーション (.NET Framework)]を選択し、プロジェクト作成ページで Web フォームを選択します。 既定では、WebForm1.aspx が作成されます。
ソリューション エクスプローラーでWebForm1.aspxを右クリックし、[コードの表示] 選択。
データベース接続とデータセットを埋める
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
メモ帳で web.config ファイルを開き、次のように
Debug
属性の値を false に設定します<configuration> <system.web> <compilation defaultLanguage="vb" debug="false" /> </system.web> </configuration>
リリース モードでビルドするようにアプリケーションを設定するには、次の手順に従います。
- ソリューション エクスプローラーで、プロジェクトを右クリックします。
- Propertiesを選択し、Configuration Manager を選択します。
- [アクティブなソリューションの構成]の下にある [Releaseを選択し、Close を選択します。
- [OK] を選択します。
Debug メニューの Start を選択して、プロジェクトをビルドして実行します。 Symptoms セクションで説明されているエラー メッセージが表示されることがあります。
Note
machine.config ファイルで設定されるタイムアウトの既定値は 90 秒です。 処理時間が 90 秒未満の場合は、フェッチするレコードの数を増やすことで処理時間を増やします。