Exemplo n.º 1
0
 private void OnAsyncHandlerCompletion(IAsyncResult ar)
 {
     if (!ar.CompletedSynchronously)
     {
         var       context = _application.Context;
         Exception error   = null;
         try
         {
             try { _handler.EndProcessRequest(ar); }
             finally { ((NetHttpResponse)context.Response).GenerateResponseHeadersForHandler(); }
         }
         catch (Exception e2)
         {
             if ((e2 is ThreadAbortException) || ((e2.InnerException != null) && (e2.InnerException is ThreadAbortException)))
             {
                 _application.CompleteRequest();
             }
             else
             {
                 error = e2;
             }
         }
         _handler = null;
         context.WorkerRequest.SetStartTime();
         ResumeSteps(error);
     }
 }
Exemplo n.º 2
0
            void IExecutionStep.Execute()
            {
                var context = _application.Context;
                var handler = (context.Handler as INetHttpHandler);

                //if (handler != null)
                //{
                //    var workerRequest = (context.WorkerRequest as WebHostWorkerRequest);
                //    if ((workerRequest != null) && workerRequest.IsHandlerExecutionDenied())
                //    {
                //        _sync = true;
                //        var exception = new HttpException(0x193, "Handler_access_denied");
                //        exception.SetFormatter(new PageForbiddenErrorFormatter(context.Request.Path, "Handler_access_denied"));
                //        throw exception;
                //    }
                //}
                if (handler == null)
                {
                    _sync = true;
                }
                else if (handler is INetHttpAsyncHandler)
                {
                    var handler2 = (INetHttpAsyncHandler)handler;
                    _sync    = false;
                    _handler = handler2;
                    var result = handler2.BeginProcessRequest(context, _completionCallback, null);
                    if (result.CompletedSynchronously)
                    {
                        _sync    = true;
                        _handler = null;
                        try { handler2.EndProcessRequest(result); }
                        finally { ((NetHttpResponse)context.Response).GenerateResponseHeadersForHandler(); }
                    }
                }
                else
                {
                    _sync = true;
                    context.SyncContext.SetSyncCaller();
                    try { handler.ProcessRequest(context); }
                    finally
                    {
                        context.SyncContext.ResetSyncCaller();
                        ((NetHttpResponse)context.Response).GenerateResponseHeadersForHandler();
                    }
                }
            }