긴 작업을 실행할 때 IIS에서 요청 시간 초과가 발생합니다. 이면에서 내 ASP.NET 응용 프로그램이 데이터를 처리하고 있지만 처리중인 레코드 수가 많아 작업에 시간이 오래 걸립니다.
그러나 IIS가 세션 시간을 초과한다고 생각합니다. IIS 또는 ASP.NET 세션에 문제가 있습니까?
미리 감사드립니다
답변:
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 서비스로 구현하기위한 후보로 고려하는 것입니다.
@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>
나는 이것을 여기에 게시하고 있습니다. 왜냐하면 나는 그것에 대해 3 시간과 4 시간을 보냈기 때문에 위의 것과 같은 답만 찾았 executionTime
습니다. 그렇다면을 추가하십시오 .하지만 문제가 해결되지 않는 경우 당신이 사용하는 ASP .NET 코어 . 이를 위해 이것은 작동합니다.
web.config 파일 requestTimeout
에서 aspNetCore
node에 속성을 추가하십시오 .
<system.webServer>
<aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>
이 예에서는 값을 10 분으로 설정합니다.
OutOfProcess
호스팅 모델 에만 적용됩니다 . 에 대한 InProcess
시간 제한 설정이 없습니다. IIS는 프로세스가 완료 될 때까지 계속 대기합니다. 여기를 참조하십시오. github.com/dotnet/AspNetCore.Docs/issues/16870