asp.net 管道处理模型源码

常说管道处理模型的20多个事件,顺序执行。这写顺序执行的事件,控制了asp.net的流程

这20几个事件在httpApplication 中。在这个类中,确实可以看到很多事件,他们是怎么串起来的呢?

里面有个ApplicationStepManager类,可以看到这个流程如下。代码还有其他看法。

其实下面的代码是经典模式的,在调用处,容易找出集成模式的代码。

internal class ApplicationStepManager : StepManager
	{
		private IExecutionStep[] _execSteps;

		private WaitCallback _resumeStepsWaitCallback;

		private int _currentStepIndex;

		private int _numStepCalls;

		private int _numSyncStepCalls;

		private int _endRequestStepIndex;

		internal ApplicationStepManager(HttpApplication app)
			: base(app)
		{
		}

		internal override void BuildSteps(WaitCallback stepCallback)
		{
			ArrayList arrayList = new ArrayList();
			HttpApplication application = base._application;
			bool flag = false;
			UrlMappingsSection urlMappings = RuntimeConfig.GetConfig().UrlMappings;
			flag = (urlMappings.IsEnabled && urlMappings.UrlMappings.Count > 0);
			arrayList.Add(new ValidateRequestExecutionStep(application));
			arrayList.Add(new ValidatePathExecutionStep(application));
			if (flag)
			{
				arrayList.Add(new UrlMappingsExecutionStep(application));
			}
			application.CreateEventExecutionSteps(HttpApplication.EventBeginRequest, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventAuthenticateRequest, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventDefaultAuthentication, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPostAuthenticateRequest, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventAuthorizeRequest, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPostAuthorizeRequest, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventResolveRequestCache, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPostResolveRequestCache, arrayList);
			arrayList.Add(new MapHandlerExecutionStep(application));
			application.CreateEventExecutionSteps(HttpApplication.EventPostMapRequestHandler, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventAcquireRequestState, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPostAcquireRequestState, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPreRequestHandlerExecute, arrayList);
			arrayList.Add(application.CreateImplicitAsyncPreloadExecutionStep());
			arrayList.Add(new CallHandlerExecutionStep(application));
			application.CreateEventExecutionSteps(HttpApplication.EventPostRequestHandlerExecute, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventReleaseRequestState, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPostReleaseRequestState, arrayList);
			arrayList.Add(new CallFilterExecutionStep(application));
			application.CreateEventExecutionSteps(HttpApplication.EventUpdateRequestCache, arrayList);
			application.CreateEventExecutionSteps(HttpApplication.EventPostUpdateRequestCache, arrayList);
			this._endRequestStepIndex = arrayList.Count;
			application.CreateEventExecutionSteps(HttpApplication.EventEndRequest, arrayList);
			arrayList.Add(new NoopExecutionStep());
			this._execSteps = new IExecutionStep[arrayList.Count];
			arrayList.CopyTo(this._execSteps);
			this._resumeStepsWaitCallback = stepCallback;
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值