IHttpAsyncHandler에 시간 초과를 설정하는 방법은 무엇입니까?
-
13-12-2019 - |
문제
web.config 파일에서 ExecutionTimeout을 설정하려고 했습니다.
<compilation debug="false" targetFramework="4.5">
<httpRuntime executionTimeout="30"/>
IIS 관리자 요청 페이지를 보면 30초 후에도 요청이 종료되지 않는 것을 볼 수 있습니다.
IHttpAsyncHandler 내에 타이머를 구현해야 합니까?
해결책
IHTTPASynchandler 시간 초과에 대한 내장 지원이 없으면 자체 시간 초과를 관리해야합니다. 아마도 이것은 디자인에 의한 것입니다. 결국 비동기 패턴을 선택한 후 MSFT는 오랫동안 실행중인 작업에 대한 기본 시간 초과를 설정하려고 할 것으로 생각합니까?
private const int REQUEST_TIMEOUT = 30000; // miliseconds (30 sec)
private void CallService()
{
try {
string url = "somewebservice.com";
WebRequest request = WebRequest.Create(url);
// Asynchronously fire off the request
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(MyRoutineThatUsesTheResults), request);
// Handle timed-out requests
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(RequestTimeout), request, REQUEST_TIMEOUT, true);
}
catch (Exception ex) {
_logger.Error("Error during web service request.", ex);
}
private void RequestTimeout(object state, bool timedOut)
{
if (timedOut) {
WebRequest request = (WebRequest)state;
_logger.WarnFormat("Request to {0} timed out (> {1} sec)", request.RequestUri.ToString(), REQUEST_TIMEOUT / 1000);
request.Abort();
}
}
.
이 접근 방식으로 작동하려면 IASyncResult가 필요하지만 확립 된 패턴은 샘플을 중단하는 데 어려움을 겪어서는 안됩니다.
또한 Polling이 계속 실행 중일 때 IIS가 앱 풀을 재활용하거나 앱 도메인을 찢어 버리기로 결정할 때 문제가 발생합니다. 그 조건이 처리하려는 조건이라면 hostingenvironment.registerObject .
다른 팁
이것을 당신의 web.config
파일:
<system.web>
<pages asyncTimeout="30" />
</system.web>
그것은 PageAsyncTask
, 그러나 단지 영광일 수도 있습니다 IHttpAsyncHandler
도?
그렇지 않다면 새로운 것을 통해 더 많은 행운을 누릴 수 있습니다. HttpTaskAsyncHandler
~에 ASP.Net
4.5 버전:http://www.asp.net/vnext/overview/whitepapers/whats-new#_Toc318097378
RegisterAsyncTask를 사용해야합니다
아래 링크를 확인하십시오.