Ошибка ожидания запроса истекло при использовании метода DataAdapter в приложении ASP.NET

Эта статья поможет устранить проблему, из-за которой в веб-приложении ASP.NET возникает ошибка (время ожидания запроса).

Исходная версия продукта: ASP.NET
Исходный номер базы знаний: 825739

Симптомы

При использовании DataAdapter.Fill метода или выполнении запроса в веб-приложении ASP.NET, на обработку в течение более 90 секунд может появиться следующее сообщение об ошибке:

HttpException (0x80004005): истекло время ожидания запроса.

Эта ошибка возникает только при запуске веб-приложения в режиме выпуска, а для атрибута Debug в файлеweb.config задано значение false.

Причина

По умолчанию для атрибута executionTimeout задано значение 90 секунд в файлеMachine.config . Эта ошибка возникает, когда время обработки превышает 90 секунд.

Обходной путь

Чтобы обойти эту проблему, увеличьте значение времени ожидания, установленное для атрибута executionTimeout в файле конфигурации.

Атрибут executionTimeout существует в <httpRequest> файлеMachine.config . Эти параметры можно изменить либо в файлеweb.config , либо в файлеMachine.config . Значение по умолчанию для времени ожидания — 90 секунд. Атрибут executionTimeout указывает максимальное количество секунд, разрешенное для выполнения запроса перед завершением работы веб-приложением ASP.NET.

Метод 1. Установка значения атрибута ExecutionTimeout в файле Web.config

  1. Откройте файлweb.config в Блокноте.

  2. <httpRuntime> Добавьте элемент в <system.web> раздел следующим образом:

    <configuration>
        <system.web>
            <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
            minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
        </system.web>
    </configuration>
    
  3. Измените значение атрибута, executionTimeout чтобы избежать ошибок времени ожидания.

  4. Сохраните файлweb.config .

Метод 2. Задайте значение атрибута ExecutionTimeout в файле Machine.config

  1. Откройте файлMachine.config в Блокноте. Файл Machine.config находится в каталоге %SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\ .

  2. В файлеMachine.config найдите <httpRuntime> элемент . Файл web.config находится в каталоге веб-приложения.

    <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false"
    minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
    
  3. Измените значение атрибута, executionTimeout чтобы избежать ошибок времени ожидания.

  4. Сохраните файлMachine.config .

Статус

Такое поведение является особенностью данного продукта.

Действия по воспроизведению поведения

  1. Запустите Microsoft Visual Studio .NET.

  2. В меню Файл выберите пункт Создать, а затем выберите Проект.

  3. Выберите Проекты Visual Basic в разделе Типы проектов, а затем выберите ASP.NET веб-приложение в разделе Шаблоны. По умолчанию WebForm1.aspx создается .

  4. В режиме конструктора щелкните правой кнопкой мыши WebForm1 и выберите Пункт Просмотреть код.

  5. Чтобы добавить подключение к базе данных и DataAdapter метод для заполнения набора данных, замените существующий код следующим кодом:

    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. Откройте файл web.config в Блокноте, а затем задайте для атрибута Debug значение false , как показано ниже.

    <configuration>
        <system.web>
            <compilation defaultLanguage="vb" debug="false" />
        </system.web>
    </configuration>
    
  7. Настройте сборку приложения в режиме выпуска. Для этого выполните следующие действия:

    1. В Обозреватель решений щелкните проект правой кнопкой мыши.
    2. Выберите Свойства, а затем Configuration Manager.
    3. Выберите Выпуск в разделе Активная конфигурация решения, а затем нажмите кнопку Закрыть.
    4. Нажмите ОК.
  8. В меню Отладка выберите Пуск , чтобы выполнить сборку и запуск проекта. Вы можете получить сообщение об ошибке, описано в разделе Симптомы .

Примечание.

Значение по умолчанию для времени ожидания, заданное в файлеMachine.config , равно 90 секундам. Если время процесса меньше 90 секунд, увеличьте время обработки, увеличив количество извлекаемых записей.

Ссылки