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

  1. Abra el archivo web.config en el Bloc de notas.

  2. 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>
    
  3. Modifique el valor del executionTimeout atributo para evitar errores de tiempo de espera.

  4. Guarde el archivo web.config .

Método 2: establecer el valor del atributo ExecutionTimeout en el archivo Machine.config

  1. 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 .

  2. 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" />
    
  3. Modifique el valor del executionTimeout atributo para evitar errores de tiempo de espera.

  4. Guarde el archivo Machine.config .

Estado

Este comportamiento es una característica del diseño de la aplicación.

Pasos para reproducir este comportamiento

  1. Inicie Microsoft Visual Studio .NET.

  2. En el menú Archivo, seleccione Nuevo y luego Proyecto.

  3. 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.

  4. En la vista Diseño, haga clic con el botón derecho en WebForm1 y, a continuación, seleccione Ver código.

  5. 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
    
  6. 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>
    
  7. Establezca la aplicación para compilar en modo de versión. Para ello, siga estos pasos:

    1. En Explorador de soluciones, haga clic con el botón derecho en el proyecto.
    2. Seleccione Propiedades y, a continuación, seleccione Configuration Manager.
    3. Seleccione Release (Versión ) en Active Solution Configuration (Configuración de solución activa) y, a continuación, seleccione Close (Cerrar).
    4. Seleccione Aceptar.
  8. 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