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
Aprire il fileweb.config nel Blocco note.
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>
Modificare il valore dell'attributo
executionTimeout
per evitare errori di timeout.Salvare il file web.config .
Metodo 2: impostare il valore dell'attributo ExecutionTimeout nel file Machine.config
Aprire il fileMachine.config nel Blocco note. Il fileMachine.config si trova nella
%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\
directory.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" />
Modificare il valore dell'attributo
executionTimeout
per evitare errori di timeout.Salvare il file Machine.config .
Stato
Si tratta di un comportamento legato alla progettazione del prodotto.
Passaggi per riprodurre il comportamento
Avviare Microsoft Visual Studio .NET.
Nel menu File puntare su Nuovo, quindi scegliere Progetto.
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.Nella visualizzazione Struttura fare clic con il pulsante destro del mouse su WebForm1 e quindi scegliere Visualizza codice.
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
Aprire il file web.config nel Blocco note e quindi impostare il valore per l'attributo
Debug
su false come indicato di seguito:<configuration> <system.web> <compilation defaultLanguage="vb" debug="false" /> </system.web> </configuration>
Impostare l'applicazione per la compilazione in modalità di rilascio. A tal fine, attenersi alla seguente procedura:
- In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto.
- Selezionare Proprietà e quindi Configuration Manager.
- Selezionare Release (Versione ) in Active Solution Configuration (Configurazione soluzione attiva) e quindi selezionare Close (Chiudi).
- Selezionare OK.
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per