public void Initialize(HttpApplication application)
        {
            for (IntegratedPipelineBlueprintStage stage = _blueprint.FirstStage; stage != null; stage = stage.NextStage)
            {
                var segment = new IntegratedPipelineContextStage(this, stage);
                switch (stage.Name)
                {
                case Constants.StageAuthenticate:
                    application.AddOnAuthenticateRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostAuthenticate:
                    application.AddOnPostAuthenticateRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageAuthorize:
                    application.AddOnAuthorizeRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostAuthorize:
                    application.AddOnPostAuthorizeRequestAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageResolveCache:
                    application.AddOnResolveRequestCacheAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostResolveCache:
                    application.AddOnPostResolveRequestCacheAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageMapHandler:
                    application.AddOnMapRequestHandlerAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostMapHandler:
                    application.AddOnPostMapRequestHandlerAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StageAcquireState:
                    application.AddOnAcquireRequestStateAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePostAcquireState:
                    application.AddOnPostAcquireRequestStateAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                case Constants.StagePreHandlerExecute:
                    application.AddOnPreRequestHandlerExecuteAsync(segment.BeginEvent, segment.EndEvent);
                    break;

                default:
                    throw new NotSupportedException(
                              string.Format(CultureInfo.InvariantCulture, Resources.Exception_UnsupportedPipelineStage, stage.Name));
                }
            }
            // application.PreSendRequestHeaders += PreSendRequestHeaders; // Null refs for async un-buffered requests with bodies.
            application.AddOnEndRequestAsync(BeginFinalWork, EndFinalWork);
        }
        public void PushExecutingStage(IntegratedPipelineContextStage stage)
        {
            IntegratedPipelineContextStage prior = Interlocked.Exchange(ref _state.ExecutingStage, stage);

            if (prior != null)
            {
                prior.Reset();
            }
        }
 public void Initialize(HttpApplication application)
 {
     for (IntegratedPipelineBlueprintStage stage = _blueprint.FirstStage; stage != null; stage = stage.NextStage)
     {
         var segment = new IntegratedPipelineContextStage(this, stage);
         switch (stage.Name)
         {
             case Constants.StageAuthenticate:
                 application.AddOnAuthenticateRequestAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StagePostAuthenticate:
                 application.AddOnPostAuthenticateRequestAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StageAuthorize:
                 application.AddOnAuthorizeRequestAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StagePostAuthorize:
                 application.AddOnPostAuthorizeRequestAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StageResolveCache:
                 application.AddOnResolveRequestCacheAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StagePostResolveCache:
                 application.AddOnPostResolveRequestCacheAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StageMapHandler:
                 application.AddOnMapRequestHandlerAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StagePostMapHandler:
                 application.AddOnPostMapRequestHandlerAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StageAcquireState:
                 application.AddOnAcquireRequestStateAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StagePostAcquireState:
                 application.AddOnPostAcquireRequestStateAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             case Constants.StagePreHandlerExecute:
                 application.AddOnPreRequestHandlerExecuteAsync(segment.BeginEvent, segment.EndEvent);
                 break;
             default:
                 throw new NotSupportedException(
                     string.Format(CultureInfo.InvariantCulture, Resources.Exception_UnsupportedPipelineStage, stage.Name));
         }
     }
     // application.PreSendRequestHeaders += PreSendRequestHeaders; // Null refs for async un-buffered requests with bodies.
     application.AddOnEndRequestAsync(BeginFinalWork, EndFinalWork);
 }
 public void PushExecutingStage(IntegratedPipelineContextStage stage)
 {
     IntegratedPipelineContextStage prior = Interlocked.Exchange(ref _state.ExecutingStage, stage);
     if (prior != null)
     {
         prior.Reset();
     }
 }