Errore di timeout della richiesta quando si usa il metodo DataAdapter in un'applicazione ASP.NET

Questo articolo consente di risolvere il problema in cui si verifica un errore (timeout della richiesta) in un'applicazione Web ASP.NET.

Versione originale del prodotto: ASP.NET
Numero KB originale: 825739

Sintomi

Quando si usa il DataAdapter.Fill metodo o si esegue una query in un'applicazione Web ASP.NET che richiede più di 90 secondi per l'elaborazione, è possibile che venga visualizzato il messaggio di errore seguente:

HttpException (0x80004005): timeout della richiesta.

Questo errore si verifica solo quando si esegue l'applicazione Web in modalità di rilascio e il valore dell'attributo Debug nel file web.config è impostato su false.

Causa

Per impostazione predefinita, il valore dell'attributo executionTimeout è impostato su 90 secondi nel file Machine.config . Questo errore si verifica quando il tempo di elaborazione supera i 90 secondi.

Soluzione alternativa

Per risolvere questo problema, aumentare il valore di timeout impostato per l'attributo executionTimeout nel file di configurazione.

L'attributo executionTimeout esiste in <httpRequest> nel file Machine.config . È possibile modificare queste impostazioni nel file web.config o nel file Machine.config . Il valore predefinito per il timeout è 90 secondi. L'attributo executionTimeout indica il numero massimo di secondi per cui è consentita l'esecuzione di una richiesta prima di essere arrestata dall'applicazione Web ASP.NET.

Metodo 1: impostare il valore dell'attributo ExecutionTimeout nel file Web.config

  1. Aprire il fileweb.config nel Blocco note.

  2. Aggiungere l'elemento <httpRuntime> nella <system.web> sezione come indicato di seguito:

    <configuration>
        <system.web>
            <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
        </system.web>
    </configuration>
    
  3. Modificare il valore dell'attributo executionTimeout per evitare errori di timeout.

  4. Salvare il file web.config .

Metodo 2: impostare il valore dell'attributo ExecutionTimeout nel file Machine.config

  1. Aprire il fileMachine.config nel Blocco note. Il fileMachine.config si trova nella %SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\ directory.

  2. Nel fileMachine.config individuare l'elemento <httpRuntime> . Il fileweb.config si trova nella directory Applicazione Web.

    <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
    minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
    
  3. Modificare il valore dell'attributo executionTimeout per evitare errori di timeout.

  4. Salvare il file Machine.config .

Stato

Si tratta di un comportamento legato alla progettazione del prodotto.

Passaggi per riprodurre il comportamento

  1. Avviare Microsoft Visual Studio .NET.

  2. Nel menu File puntare su Nuovo, quindi scegliere Progetto.

  3. Selezionare Progetti di Visual Basic in Tipi di progetto e quindi selezionare ASP.NET'applicazione Web in Modelli. Per impostazione predefinita, WebForm1.aspx viene creato.

  4. Nella visualizzazione Struttura fare clic con il pulsante destro del mouse su WebForm1 e quindi scegliere Visualizza codice.

  5. Per aggiungere la connessione al database e il DataAdapter metodo per riempire il set di dati, sostituire il codice esistente con il codice seguente:

    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. Aprire il file web.config nel Blocco note e quindi impostare il valore per l'attributo Debugsu false come indicato di seguito:

    <configuration>
        <system.web>
            <compilation defaultLanguage="vb" debug="false" />
        </system.web>
    </configuration>
    
  7. Impostare l'applicazione per la compilazione in modalità di rilascio. A tal fine, attenersi alla seguente procedura:

    1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto.
    2. Selezionare Proprietà e quindi Configuration Manager.
    3. Selezionare Release (Versione ) in Active Solution Configuration (Configurazione soluzione attiva) e quindi selezionare Close (Chiudi).
    4. Selezionare OK.
  8. Nel menu Debug selezionare Avvia per compilare ed eseguire il progetto. È possibile che venga visualizzato il messaggio di errore descritto nella sezione Sintomi .

Nota

Il valore predefinito per il timeout impostato nel file Machine.config è 90 secondi. Se il tempo di elaborazione è inferiore a 90 secondi, aumentare il tempo di elaborazione aumentando il numero di record da recuperare.

Riferimenti