Erreur de délai d’expiration de la demande lorsque vous utilisez la méthode DataAdapter dans une application ASP.NET
Cet article vous aide à résoudre le problème où une erreur (Délai d’expiration de la demande) se produit dans une application web ASP.NET.
Version d’origine du produit : ASP.NET
Numéro de la base de connaissances d’origine : 825739
Symptômes
Lorsque vous utilisez la DataAdapter.Fill
méthode ou que vous exécutez une requête dans une application web ASP.NET dont le traitement prend plus de 90 secondes, vous pouvez recevoir le message d’erreur suivant :
HttpException (0x80004005) : la demande a expiré.
Cette erreur se produit uniquement lorsque vous exécutez l’application Web en mode release et que la valeur de l’attribut Debug
dans le fichier web.config est définie sur false.
Cause
Par défaut, la valeur de l’attribut executionTimeout
est définie sur 90 secondes dans le fichier Machine.config . Cette erreur se produit lorsque le temps de traitement dépasse 90 secondes.
Solution de contournement
Pour contourner ce problème, augmentez la valeur de délai d’attente définie pour l’attribut executionTimeout
dans le fichier de configuration.
L’attribut executionTimeout
existe sous <httpRequest>
dans le fichier Machine.config . Vous pouvez modifier ces paramètres dans le fichier web.config ou dans le fichier Machine.config . La valeur par défaut du délai d’attente est de 90 secondes. L’attribut executionTimeout
indique le nombre maximal de secondes pendant lesquelles une requête est autorisée à s’exécuter avant d’être arrêtée par l’application web ASP.NET.
Méthode 1 : Définir la valeur de l’attribut ExecutionTimeout dans le fichier Web.config
Ouvrez le fichier web.config dans le Bloc-notes.
Ajoutez l’élément
<httpRuntime>
dans la<system.web>
section comme suit :<configuration> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> </configuration>
Modifiez la valeur de l’attribut
executionTimeout
pour éviter les erreurs de délai d’attente.Enregistrez le fichier web.config .
Méthode 2 : Définir la valeur de l’attribut ExecutionTimeout dans le fichier Machine.config
Ouvrez le fichier Machine.config dans le Bloc-notes. Le fichier Machine.config se trouve dans le
%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\
répertoire .Dans le fichier Machine.config , recherchez l’élément
<httpRuntime>
. Le fichier web.config se trouve dans le répertoire de l’application web.<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
Modifiez la valeur de l’attribut
executionTimeout
pour éviter les erreurs de délai d’attente.Enregistrez le fichier Machine.config .
Statut
Ce comportement est inhérent au produit.
Procédures pour reproduire le problème
Démarrez Microsoft Visual Studio .NET.
Dans le menu Fichier, pointez sur Nouveau, puis sélectionnez Projet.
Sélectionnez Projets Visual Basic sous Types de projets, puis ASP.NET application web sous Modèles. Par défaut,
WebForm1.aspx
est créé.En mode Création, cliquez avec le bouton droit sur WebForm1, puis sélectionnez Afficher le code.
Pour ajouter la connexion à la base de données et la
DataAdapter
méthode pour remplir le jeu de données, remplacez le code existant par le code suivant :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
Ouvrez le fichier web.config dans le Bloc-notes, puis définissez la valeur de l’attribut
Debug
sur false comme suit :<configuration> <system.web> <compilation defaultLanguage="vb" debug="false" /> </system.web> </configuration>
Définissez l’application pour qu’elle génère en mode mise en production. Pour cela, procédez comme suit :
- Dans Explorateur de solutions, cliquez avec le bouton droit sur votre projet.
- Sélectionnez Propriétés, puis Configuration Manager.
- Sélectionnez Mise en production sous Configuration de la solution active, puis sélectionnez Fermer.
- Sélectionnez OK.
Dans le menu Déboguer , sélectionnez Démarrer pour générer et exécuter le projet. Vous pouvez recevoir le message d’erreur décrit dans la section Symptômes .
Remarque
La valeur par défaut du délai d’attente défini dans le fichier Machine.config est de 90 secondes. Si le temps de traitement est inférieur à 90 secondes, augmentez le temps de traitement en augmentant le nombre d’enregistrements à extraire.
References
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour