Fehler beim Anfordern eines Timeouts, wenn Sie die DataAdapter-Methode in einer ASP.NET-Anwendung verwenden
Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem in einer ASP.NET Webanwendung ein Fehler (Anforderungstimeout) auftritt.
Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 825739
Problembeschreibung
Wenn Sie die Methode verwenden DataAdapter.Fill oder eine Abfrage in einer ASP.NET Webanwendung ausführen, die mehr als 90 Sekunden dauert, wird möglicherweise die folgende Fehlermeldung angezeigt:
HttpException (0x80004005): Anforderungstimeout.
Dieser Fehler tritt nur auf, wenn Sie die Webanwendung im Freigabemodus ausführen und der Wert des Debug Attributs in der web.config Datei auf "false" festgelegt ist.
Ursache
Standardmäßig wird der Wert des executionTimeout Attributs in der dateiMachine.config auf 90 Sekunden festgelegt. Dieser Fehler tritt auf, wenn die Verarbeitungszeit 90 Sekunden überschreitet.
Problemumgehung
Um dieses Problem zu umgehen, erhöhen Sie den Timeoutwert, der für das Attribut in der Konfigurationsdatei festgelegt executionTimeout ist.
Das executionTimeout Attribut befindet sich unter der datei <httpRequest> Machine.config. Sie können diese Einstellungen entweder in der dateiweb.config oder in der DateiMachine.config ändern. Der Standardwert für das Timeout ist 90 Sekunden. Das Attribut gibt die maximale Anzahl von Sekunden an, die executionTimeout eine Anforderung ausführen darf, bevor sie von der ASP.NET Webanwendung heruntergefahren wird.
Methode 1: Festlegen des ExecutionTimeout-Attributwerts in der Web.config Datei
Öffnen Sie die dateiweb.config in Editor.
Fügen Sie das
<httpRuntime>Element im Abschnitt wie folgt<system.web>hinzu:<configuration> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> </configuration>Ändern Sie den Wert des
executionTimeoutAttributs, um Timeoutfehler zu vermeiden.Speichern Sie die dateiweb.config.
Methode 2: Festlegen des ExecutionTimeout-Attributwerts in der Machine.config Datei
Öffnen Sie die dateiMachine.config in Editor. Die Machine.config Datei befindet sich im
%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\Verzeichnis.Suchen Sie in der dateiMachine.config nach dem
<httpRuntime>Element. Die web.config-Datei befindet sich im Webanwendungsverzeichnis.<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />Ändern Sie den Wert des
executionTimeoutAttributs, um Timeoutfehler zu vermeiden.Speichern Sie die dateiMachine.config.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Schritte zum Reproduzieren des Verhaltens
Starten Sie Microsoft Visual Studio .NET.
Zeigen Sie im Menü "Datei" auf "Neu", und wählen Sie dann Project aus.
Wählen Sie Visual Basic Projekte unter Project Typen und dann ASP.NET Webanwendung unter Vorlagen aus. Standardmäßig
WebForm1.aspxwird erstellt.Klicken Sie in der Entwurfsansicht mit der rechten Maustaste auf WebForm1, und wählen Sie dann Code anzeigen aus.
Um die Datenbankverbindung und die
DataAdapterMethode zum Füllen des Datasets hinzuzufügen, ersetzen Sie den vorhandenen Code durch den folgenden Code: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Öffnen Sie die web.config-Datei in Editor, und legen Sie den Wert für das
DebugAttribut wie folgt auf "false" fest:<configuration> <system.web> <compilation defaultLanguage="vb" debug="false" /> </system.web> </configuration>Legen Sie fest, dass die Anwendung im Releasemodus erstellt wird. Gehen Sie dazu wie folgt vor:
- Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt.
- Wählen Sie "Eigenschaften" und dann "Configuration Manager" aus.
- Wählen Sie "Freigeben" unter "Aktive Lösungskonfiguration" und dann "Schließen" aus.
- Wählen Sie OK aus.
Wählen Sie im Menü "Debuggen" die Option "Start" aus, um das Projekt zu erstellen und auszuführen. Möglicherweise wird die Fehlermeldung angezeigt, die im Abschnitt "Symptome" beschrieben wird.
Hinweis
Der Standardwert für das Timeout, das in der Machine.config Datei festgelegt ist, beträgt 90 Sekunden. Wenn die Verarbeitungszeit weniger als 90 Sekunden beträgt, erhöhen Sie die Verarbeitungszeit, indem Sie die Anzahl der abzurufenden Datensätze erhöhen.