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

  1. Öffnen Sie die dateiweb.config in Editor.

  2. 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>
    
  3. Ändern Sie den Wert des executionTimeout Attributs, um Timeoutfehler zu vermeiden.

  4. Speichern Sie die dateiweb.config.

Methode 2: Festlegen des ExecutionTimeout-Attributwerts in der Machine.config Datei

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

  2. 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" />
    
  3. Ändern Sie den Wert des executionTimeout Attributs, um Timeoutfehler zu vermeiden.

  4. Speichern Sie die dateiMachine.config.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie Microsoft Visual Studio .NET.

  2. Zeigen Sie im Menü "Datei" auf "Neu", und wählen Sie dann Project aus.

  3. Wählen Sie Visual Basic Projekte unter Project Typen und dann ASP.NET Webanwendung unter Vorlagen aus. Standardmäßig WebForm1.aspx wird erstellt.

  4. Klicken Sie in der Entwurfsansicht mit der rechten Maustaste auf WebForm1, und wählen Sie dann Code anzeigen aus.

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

    <configuration>
        <system.web>
            <compilation defaultLanguage="vb" debug="false" />
        </system.web>
    </configuration>
    
  7. Legen Sie fest, dass die Anwendung im Releasemodus erstellt wird. Gehen Sie dazu wie folgt vor:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt.
    2. Wählen Sie "Eigenschaften" und dann "Configuration Manager" aus.
    3. Wählen Sie "Freigeben" 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.

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.

References