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 属性値を設定する
メモ帳で 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 .NET を起動します。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] を選択します。
[プロジェクトの種類] で [Visual Basic プロジェクト] を選択し、[テンプレート] で [ASP.NET Web アプリケーション] を選択します。 既定では、
WebForm1.aspx
が作成されます。[デザイン] ビューで[ WebForm1] を右クリックし、[ コードの表示] を選択します。
データベース接続と
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>
リリース モードでビルドするようにアプリケーションを設定します。 これを行うには、次の手順を実行します。
- ソリューション エクスプローラーで、プロジェクトを右クリックします。
- [プロパティ] を選択し、[Configuration Manager] を選択します。
- [Active Solution Configuration]\(アクティブ ソリューション構成\) で [リリース] を選択し、[閉じる] を選択します。
- [OK] を選択します。
[ デバッグ ] メニューの [ 開始 ] を選択して、プロジェクトをビルドして実行します。 [現象] セクションで説明されているエラー メッセージ が 表示される場合があります。
注:
Machine.config ファイルに設定されているタイムアウトの既定値は 90 秒です。 処理時間が 90 秒未満の場合は、フェッチするレコードの数を増やすことで処理時間を増やします。
関連情報
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示