ASP.NET 애플리케이션에서 DataAdapter 메서드를 사용하는 경우 요청 시간 초과 오류

이 문서는 ASP.NET 웹 애플리케이션에서 오류(요청 시간 초과)가 발생하는 문제를 resolve 데 도움이 됩니다.

원래 제품 버전: ASP.NET
원래 KB 번호: 825739

증상

메서드를 DataAdapter.Fill 사용하거나 처리하는 데 90초 이상 걸리는 ASP.NET 웹 애플리케이션에서 쿼리를 실행하는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.

HttpException(0x80004005): 요청 시간이 초과되었습니다.

이 오류는 릴리스 모드에서 웹 애플리케이션을 실행하고 web.config 파일의 Debug 특성 값이 false로 설정된 경우에만 발생합니다.

원인

기본적으로 특성 값 executionTimeoutMachine.config 파일에서 90초로 설정됩니다. 이 오류는 처리 시간이 90초를 초과할 때 발생합니다.

해결 방법

이 문제를 해결하려면 구성 파일의 특성에 대해 executionTimeout 설정된 제한 시간 값을 늘입니다.

특성은 executionTimeoutMachine.config 파일에 있습니다<httpRequest>. 이러한 설정은 web.config 파일이나 Machine.config 파일에서 변경할 수 있습니다. 제한 시간의 기본값은 90초입니다. 특성은 executionTimeout ASP.NET 웹 애플리케이션에 의해 종료되기 전에 요청이 실행될 수 있는 최대 시간(초)을 나타냅니다.

방법 1: Web.config 파일에서 ExecutionTimeout 특성 값 설정

  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: Machine.config 파일에서 ExecutionTimeout 특성 값 설정

  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 Projects를 선택한 다음 템플릿에서 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초 미만인 경우 가져올 레코드 수를 늘려 처리 시간을 늘입니다.

참조