문제

web.config 파일에서 ExecutionTimeout을 설정하려고 했습니다.

<compilation debug="false" targetFramework="4.5">
<httpRuntime executionTimeout="30"/>

IIS 관리자 요청 페이지를 보면 30초 후에도 요청이 종료되지 않는 것을 볼 수 있습니다.
IHttpAsyncHandler 내에 타이머를 구현해야 합니까?

도움이 되었습니까?

해결책

IHTTPASynchandler 시간 초과에 대한 내장 지원이 없으면 자체 시간 초과를 관리해야합니다. 아마도 이것은 디자인에 의한 것입니다. 결국 비동기 패턴을 선택한 후 MSFT는 오랫동안 실행중인 작업에 대한 기본 시간 초과를 설정하려고 할 것으로 생각합니까?

내가 할 일은 threadpool.registerwaitforsingleObject < / a> 적절한 시간 초과로 폴링을 관리합니다. 다음은 결코 반환하지 않는 웹 서비스에서 기다리는 것을 피하기 위해 사용하는 코드 샘플입니다.

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를 사용해야합니다

아래 링크를 확인하십시오.

http://msdn.microsoft.com/en-us/magazine/cc163725.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top