긴 ASP.NET 작업에 대한 IIS 요청 시간 초과


89

긴 작업을 실행할 때 IIS에서 요청 시간 초과가 발생합니다. 이면에서 내 ASP.NET 응용 프로그램이 데이터를 처리하고 있지만 처리중인 레코드 수가 많아 작업에 시간이 오래 걸립니다.

그러나 IIS가 세션 시간을 초과한다고 생각합니다. IIS 또는 ASP.NET 세션에 문제가 있습니까?

미리 감사드립니다

답변:


147

ASP.NET 스크립트 실행에 허용되는 시간을 연장하려면 Server.ScriptTimeout값 을 늘리십시오 . 기본값은 .NET 1.x의 경우 90 초이고 .NET 2.0 이상의 경우 110 초입니다.

예를 들면 :

// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;

이 값은 구성 요소 의 web.config파일에서도 구성 할 수 있습니다 httpRuntime.

<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300" 
  ... other configuration attributes ...
/>

여기에 이미지 설명 입력

MSDN 문서 에 따라 참고하십시오 .

"이 시간 제한은 컴파일 요소의 디버그 속성이 False 인 경우에만 적용됩니다. 따라서 디버그 속성이 True 인 경우 디버깅하는 동안 응용 프로그램 종료를 방지하기 위해이 속성을 큰 값으로 설정할 필요가 없습니다. "

이미이 작업을 수행했지만 세션이 만료되면 ASP.NET HttpSessionState.Timeout값 을 늘립니다 .

예를 들면 :

// Increase session timeout to thirty minutes
Session.Timeout = 30;

이 값은 구성 요소 의 web.config파일에서도 구성 할 수 있습니다 sessionState.

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

스크립트를 실행하는 데 몇 분이 걸리고 동시 사용자가 많은 경우 페이지를 비동기 페이지로 변경하는 것이 좋습니다. 이렇게하면 응용 프로그램의 확장 성이 향상됩니다.

다른 대안은 서버에 대한 관리자 액세스 권한이있는 경우이 장기 실행 작업을 예약 된 작업 또는 Windows 서비스로 구현하기위한 후보로 고려하는 것입니다.


참고로 httpRuntime executionTimeout은 초 단위이며 대문자 T가 없습니다
Andrew Rimmer 2012

7
이 시간 초과 값을 사용하려면 디버그 모드를 false로 설정해야합니다. <system.web> <compilation debug = "false"targetFramework = "4.0"/> </ system.web>
Jesse Roper

@JesseRoper에 대한 문서를 알려 주시면 답변에 포함시켜 주시거나 직접 답변을 편집하실 수 있습니다. 고마워.
Kev

기본 executionTimeout 값은 110 초입니다.
frattaro 2015 년

21

@Kev의 훌륭하고 철저한 답변!

WebForms 응용 프로그램의 한 관리 페이지에서만 오랫동안 처리했기 때문에 코드 옵션을 사용했습니다. 그러나 프로덕션에서 일시적인 빠른 수정을 허용하기 위해 <location>web.config 의 태그에서 구성 버전을 사용했습니다 . 이렇게하면 내 관리 / 처리 페이지에 충분한 시간이 생기고 최종 사용자를위한 페이지는 이전 시간 초과 동작을 유지했습니다.

아래에서 동일한 빠른 수정이 필요한 Google 직원을 위해 구성을 제공했습니다. 당신은 당연히 다른 내 '4시간'예보다 값 만 사용해야 DO의 세션이주의를 timeOut분에 요청하면서, executionTimeout초입니다!

그리고-이미 2015 년이기 때문에-NON- quickfix 의 경우 KEV가 2010 년에 답변했을 때 최첨단이었던 .NET 2.0의 ASYNC 페이지 대신 가능하면 .Net 4.5의 async / await 를 사용해야합니다. :).

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>

내 web.config에 "위치"스 니펫을 포함했지만 작동하지 않습니다. "executionTimeout"만 사용하고 있으며 "sessionState"는 필요하지 않습니다. 다른 것을 구성해야합니까? NET 4.0을 사용하고 있습니다. "system.web"에서 직접 "httpRuntime"을 사용하면 모든 페이지에서 시간 초과가 올바르게 적용됩니다.
올리버

12

나는 이것을 여기에 게시하고 있습니다. 왜냐하면 나는 그것에 대해 3 시간과 4 시간을 보냈기 때문에 위의 것과 같은 답만 찾았 executionTime습니다. 그렇다면을 추가하십시오 .하지만 문제가 해결되지 않는 경우 당신이 사용하는 ASP .NET 코어 . 이를 위해 이것은 작동합니다.

web.config 파일 requestTimeout에서 aspNetCorenode에 속성을 추가하십시오 .

<system.webServer>
  <aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>

이 예에서는 값을 10 분으로 설정합니다.

참조 : https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module


이것은 OutOfProcess호스팅 모델 에만 적용됩니다 . 에 대한 InProcess시간 제한 설정이 없습니다. IIS는 프로세스가 완료 될 때까지 계속 대기합니다. 여기를 참조하십시오. github.com/dotnet/AspNetCore.Docs/issues/16870
Rosdi Kasim

-9

~그래서 위치에서 문자를 제거

path="~/Admin/SomePage.aspx"

된다

path="Admin/SomePage.aspx"

이 질문에 대답하지 않습니다
이고르
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.