Error de tiempo de espera de la solicitud cuando se usa el método DataAdapter en una aplicación ASP.NET
Este artículo le ayuda a resolver el problema en el que se produce un error (tiempo de espera de solicitud agotado) en una aplicación web de ASP.NET.
Versión original del producto: ASP.NET
Número de KB original: 825739
Síntomas
Cuando se usa el DataAdapter.Fill
método o se ejecuta una consulta en una aplicación web de ASP.NET que tarda más de 90 segundos en procesarse, es posible que reciba el siguiente mensaje de error:
HttpException (0x80004005): se agotó el tiempo de espera de la solicitud.
Este error solo se produce cuando se ejecuta la aplicación web en modo de versión y el valor del Debug
atributo en el archivo web.config se establece en false.
Causa
De forma predeterminada, el valor del executionTimeout
atributo se establece en 90 segundos en el archivo Machine.config . Este error se produce cuando el tiempo de procesamiento supera los 90 segundos.
Solución alternativa
Para solucionar este problema, aumente el valor de tiempo de espera establecido para el executionTimeout
atributo en el archivo de configuración.
El executionTimeout
atributo existe en <httpRequest>
en el archivo Machine.config . Puede cambiar esta configuración en el archivo web.config o en el archivo Machine.config . El valor predeterminado para el tiempo de espera es de 90 segundos. El executionTimeout
atributo indica el número máximo de segundos que se permite ejecutar una solicitud antes de que la aplicación web ASP.NET la cierre.
Método 1: establecer el valor del atributo ExecutionTimeout en el archivo Web.config
Abra el archivo web.config en el Bloc de notas.
Agregue el
<httpRuntime>
elemento en la sección de la<system.web>
siguiente manera:<configuration> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> </configuration>
Modifique el valor del
executionTimeout
atributo para evitar errores de tiempo de espera.Guarde el archivo web.config .
Método 2: establecer el valor del atributo ExecutionTimeout en el archivo Machine.config
Abra el archivo Machine.config en el Bloc de notas. El archivo Machine.config se encuentra en el
%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\
directorio .En el archivo Machine.config , busque el
<httpRuntime>
elemento . El archivo web.config se encuentra en el directorio Aplicación web.<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
Modifique el valor del
executionTimeout
atributo para evitar errores de tiempo de espera.Guarde el archivo Machine.config .
Estado
Este comportamiento es una característica del diseño de la aplicación.
Pasos para reproducir este comportamiento
Inicie Microsoft Visual Studio .NET.
En el menú Archivo, seleccione Nuevo y luego Proyecto.
Seleccione Proyectos de Visual Basic en Tipos de proyecto y, a continuación, seleccione ASP.NET aplicación web en Plantillas. De forma predeterminada,
WebForm1.aspx
se crea.En la vista Diseño, haga clic con el botón derecho en WebForm1 y, a continuación, seleccione Ver código.
Para agregar la conexión de base de datos y el
DataAdapter
método para rellenar el conjunto de datos, reemplace el código existente por el código siguiente: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
Abra el archivo web.config en el Bloc de notas y, a continuación, establezca el valor del
Debug
atributo en false como se indica a continuación:<configuration> <system.web> <compilation defaultLanguage="vb" debug="false" /> </system.web> </configuration>
Establezca la aplicación para compilar en modo de versión. Para ello, siga estos pasos:
- En Explorador de soluciones, haga clic con el botón derecho en el proyecto.
- Seleccione Propiedades y, a continuación, seleccione Configuration Manager.
- Seleccione Release (Versión ) en Active Solution Configuration (Configuración de solución activa) y, a continuación, seleccione Close (Cerrar).
- Seleccione Aceptar.
En el menú Depurar , seleccione Iniciar para compilar y ejecutar el proyecto. Puede recibir el mensaje de error que describe la sección Síntomas .
Nota:
El valor predeterminado del tiempo de espera establecido en el archivo Machine.config es de 90 segundos. Si el tiempo de proceso es inferior a 90 segundos, aumente el tiempo de procesamiento aumentando el número de registros que se van a capturar.
Referencias
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de