Freigeben über


Timeoutfehler anfordern, wenn Sie die DataAdapter-Methode in einer ASP.NET Anwendung verwenden

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem ein Fehler (Request Timed Out) in einer ASP.NET Webanwendung auftritt.

Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 825739

Problembeschreibung

Wenn Sie die DataAdapter.Fill Methode verwenden oder eine Abfrage in einer ASP.NET Webanwendung ausführen, die mehr als 90 Sekunden dauert, um sie zu verarbeiten, wird möglicherweise die folgende Fehlermeldung angezeigt:

HttpException (0x80004005): Timeout anfordern.

Dieser Fehler tritt nur auf, wenn Sie die Webanwendung im Versionsmodus ausführen und der Wert des Debug Attributs in der Datei "web.config " auf "false" festgelegt ist.

Ursache

Der Wert des executionTimeout Attributs wird standardmäßig auf 90 Sekunden in der Datei "machine.config " 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 executionTimeout Attribut in der Konfigurationsdatei festgelegt ist.

Das executionTimeout Attribut ist in der Datei "machine.config" vorhanden<httpRequest>. Sie können diese Einstellungen entweder in der Datei "web.config " oder in der Datei "machine.config " ändern. Der Standardwert für timeout beträgt 90 Sekunden. Das executionTimeout Attribut gibt die maximale Anzahl von Sekunden an, die eine Anforderung ausführen darf, bevor sie von der ASP.NET-Webanwendung heruntergefahren wird.

Methode 1: Festlegen des Werts des executionTimeout-Attributs in der Datei "web.config"

  1. Öffnen Sie die Datei "web.config " im Editor.

  2. Fügen Sie das <httpRuntime> Element im <system.web> Abschnitt wie folgt hinzu:

    <configuration>
        <system.web>
            <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
        </system.web>
    </configuration>
    
  3. Ändern Sie den Wert des executionTimeout Attributs, um Timeoutfehler zu vermeiden.

  4. Speichern Sie die Datei web.config.

Methode 2: Festlegen des Werts des executionTimeout-Attributs in der Datei "machine.config"

  1. Öffnen Sie die Datei "machine.config " im Editor. Die Datei "machine.config " befindet sich im %SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\ Verzeichnis.

  2. Suchen Sie in der Datei "machine.config " das <httpRuntime> Element. Die Datei "web.config " befindet sich im Verzeichnis "Webanwendung".

    <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
    minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
    
  3. Ändern Sie den Wert des executionTimeout Attributs, um Timeoutfehler zu vermeiden.

  4. Speichern Sie die Datei "machine.config ".

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie Microsoft Visual Studio.

  2. Wählen Sie im Menü Datei die Option Neu>Projekt.

  3. Wählen Sie Visual Basic unter "Alle Sprachen>" unter "Alle Plattformen>" unter "Alle Projekttypen" aus, wählen Sie in der Vorlagenliste ASP.NET Webanwendung (.NET Framework) und dann "Webformulare" auf der Projekterstellungsseite aus. Standardmäßig wird WebForm1.aspx erstellt.

  4. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf WebForm1.aspx, und wählen Sie dann "Code anzeigen" aus.

  5. Um die Datenbankverbindung und die DataAdapter Methode zum Ausfü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
    
  6. Öffnen Sie die Datei "web.config " im Editor, und legen Sie dann den Wert für das Debug Attribut wie folgt auf "false" fest:

    <configuration>
        <system.web>
            <compilation defaultLanguage="vb" debug="false" />
        </system.web>
    </configuration>
    
  7. Führen Sie die folgenden Schritte aus, um die Anwendung im Releasemodus zu erstellen:

    1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt.
    2. Wählen Sie "Eigenschaften" und dann "Configuration Manager" aus.
    3. Wählen Sie "Release" unter "Aktive Lösungskonfiguration" und dann "Schließen" aus.
    4. Wählen Sie OK aus.
  8. 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.

Notiz

Der Standardwert für timeout, der in der Datei "machine.config " festgelegt ist, beträgt 90 Sekunden. Wenn die Prozesszeit weniger als 90 Sekunden beträgt, erhöhen Sie die Verarbeitungszeit, indem Sie die Anzahl der abzurufenden Datensätze erhöhen.

References