ASP.NET 애플리케이션에서 DataAdapter 메서드를 사용하는 경우 요청 시간 초과 오류
이 문서는 ASP.NET 웹 애플리케이션에서 오류(요청 시간 초과)가 발생하는 문제를 resolve 데 도움이 됩니다.
원래 제품 버전: ASP.NET
원래 KB 번호: 825739
증상
메서드를 DataAdapter.Fill
사용하거나 처리하는 데 90초 이상 걸리는 ASP.NET 웹 애플리케이션에서 쿼리를 실행하는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.
HttpException(0x80004005): 요청 시간이 초과되었습니다.
이 오류는 릴리스 모드에서 웹 애플리케이션을 실행하고 web.config 파일의 Debug
특성 값이 false로 설정된 경우에만 발생합니다.
원인
기본적으로 특성 값 executionTimeout
은 Machine.config 파일에서 90초로 설정됩니다. 이 오류는 처리 시간이 90초를 초과할 때 발생합니다.
해결 방법
이 문제를 해결하려면 구성 파일의 특성에 대해 executionTimeout
설정된 제한 시간 값을 늘입니다.
특성은 executionTimeout
Machine.config 파일에 있습니다<httpRequest>
. 이러한 설정은 web.config 파일이나 Machine.config 파일에서 변경할 수 있습니다. 제한 시간의 기본값은 90초입니다. 특성은 executionTimeout
ASP.NET 웹 애플리케이션에 의해 종료되기 전에 요청이 실행될 수 있는 최대 시간(초)을 나타냅니다.
방법 1: Web.config 파일에서 ExecutionTimeout 특성 값 설정
메모장에서 web.config 파일을 엽니다.
섹션의
<httpRuntime>
요소를<system.web>
다음과 같이 추가합니다.<configuration> <system.web> <httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> </system.web> </configuration>
제한 시간 오류를 방지하도록 특성 값을
executionTimeout
수정합니다.web.config 파일을 저장합니다.
방법 2: Machine.config 파일에서 ExecutionTimeout 특성 값 설정
메모장에서 Machine.config 파일을 엽니다. Machine.config 파일은 디렉터리에 있습니다
%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\
.Machine.config 파일에서 요소를 찾습니다
<httpRuntime>
. web.config 파일은 웹 애플리케이션 디렉터리에 있습니다.<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
제한 시간 오류를 방지하도록 특성 값을
executionTimeout
수정합니다.Machine.config 파일을 저장합니다.
상태
이것은 의도적으로 설계된 동작입니다.
동작을 재현하는 단계
Microsoft Visual Studio .NET을 시작합니다.
파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 선택합니다.
프로젝트 형식에서 Visual Basic Projects를 선택한 다음 템플릿에서 ASP.NET 웹 애플리케이션을 선택합니다. 기본적으로 는
WebForm1.aspx
생성됩니다.디자인 보기에서 WebForm1을 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 선택합니다.
데이터 세트를 채울 데이터베이스 연결 및
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
메모장에서 web.config 파일을 열고 특성 값을
Debug
다음과 같이 false 로 설정합니다.<configuration> <system.web> <compilation defaultLanguage="vb" debug="false" /> </system.web> </configuration>
릴리스 모드에서 빌드할 애플리케이션을 설정합니다. 이렇게 하려면 다음과 같이 하십시오.
- 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭합니다.
- 속성을 선택한 다음, Configuration Manager 선택합니다.
- 활성 솔루션 구성에서 릴리스를 선택한 다음, 닫기를 선택합니다.
- 확인을 선택합니다.
디버그 메뉴에서 시작을 선택하여 프로젝트를 빌드하고 실행합니다. 증상 섹션에서 설명하는 오류 메시지가 표시될 수 있습니다.
참고
Machine.config 파일에 설정된 제한 시간의 기본값은 90초입니다. 프로세스 시간이 90초 미만인 경우 가져올 레코드 수를 늘려 처리 시간을 늘입니다.
참조
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기