Exemplo n.º 1
0
 private static void EnableIntegratedPipeline(IAppBuilder app, Action<IntegratedPipelineBlueprintStage> onStageCreated)
 {
     var stage = new IntegratedPipelineBlueprintStage { Name = "PreHandlerExecute" };
     onStageCreated(stage);
     Action<IAppBuilder, string> stageMarker = (builder, name) =>
     {
         Func<AppFunc, AppFunc> decoupler = next =>
         {
             if (string.Equals(name, stage.Name, StringComparison.OrdinalIgnoreCase))
             {
                 // no decoupling needed when pipeline is already split at this name
                 return next;
             }
             if (!IntegratedPipelineContext.VerifyStageOrder(name, stage.Name))
             {
                 // Stage markers added out of order will be ignored.
                 // Out of order stages/middleware may be run earlier than expected.
                 // TODO: LOG
                 return next;
             }
             stage.EntryPoint = next;
             stage = new IntegratedPipelineBlueprintStage
             {
                 Name = name,
                 NextStage = stage,
             };
             onStageCreated(stage);
             return (AppFunc)IntegratedPipelineContext.ExitPointInvoked;
         };
         app.Use(decoupler);
     };
     app.Properties[Constants.IntegratedPipelineStageMarker] = stageMarker;
     app.Properties[Constants.BuilderDefaultApp] = (Func<IDictionary<string, object>, Task>)IntegratedPipelineContext.DefaultAppInvoked;
 }
        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);
        }
Exemplo n.º 3
0
 public IntegratedPipelineContextStage(IntegratedPipelineContext context, IntegratedPipelineBlueprintStage stage)
 {
     _context = context;
     _stage   = stage;
 }
 public IntegratedPipelineContextStage(IntegratedPipelineContext context, IntegratedPipelineBlueprintStage stage)
 {
     _context = context;
     _stage = stage;
 }