|
|
2#

楼主 |
发表于 2008-11-5 09:10:23
|
只看该作者

Asp.Net页面执行流程分析
正如2.2中所提到的,这里主要是生成一个HttpApplication对象:
以下为引用的内容:
internal static string GetApplicationFile()
{
return Path.Combine(HttpRuntime.AppDomainAppPathInternal,
"global.asax");
}
首先会查看是否存在global.asax文件,如果有的话就用它来生成HttpApplication对象,从这里我们可以看到global.asax的文件名是在asp.net的框架中写死的,不能修改的。如果这个文件不存在就使用默认的对象。
创建好HttpApplication之后对它进行初始化:
以下为引用的内容:
application = (HttpApplication)
HttpRuntime.CreateNonPublicInstance(this._theApplicationType);
using (ApplicationImpersonationContext context2 = new
ApplicationImpersonationContext())
{
application.InitInternal(context, this._state,
this._eventHandlerMethods);
}
四、HttpApplication这个是比较复杂也比较重要的一个对象首先是执行初始化操作,比较重要的一步就是进行HttpModule的初始化:
以下为引用的内容:
private void InitModules()
{
this._moduleCollection =
RuntimeConfig.GetAppConfig().HttpModules.CreateModules();
this.InitModulesCommon();
}它会读取web.config中所有HttpModule的配置
在HookupEventHandlersForApplicationAndModules方法中绑定Module的事件处理
程序接着进行事件实际绑定:
以下为引用的内容:
if (HttpRuntime.UseIntegratedPipeline)
{
this._stepManager = new PipelineStepManager(this);
}
else
{
this._stepManager = new ApplicationStepManager(this);
}
this._stepManager.BuildSteps(this._resumeStepsWaitCallback);
在ApplicationStepManager的BuildSteps方法中可以看到事件的绑定执行顺序:
app.CreateEventExecutionSteps(HttpApplication.EventBeginRequest,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventAuthenticateRequest,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventDefaultAuthenticatio
n, steps);
app.CreateEventExecutionSteps(HttpApplication.EventPostAuthenticateRequ
est, steps);
app.CreateEventExecutionSteps(HttpApplication.EventAuthorizeRequest,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventPostAuthorizeRequest
, steps);
app.CreateEventExecutionSteps(HttpApplication.EventResolveRequestCache,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventPostResolveRequestCa
che, steps);
steps.Add(new HttpApplication.MapHandlerExecutionStep(app));
app.CreateEventExecutionSteps(HttpApplication.EventPostMapRequestHandle
r, steps);
app.CreateEventExecutionSteps(HttpApplication.EventAcquireRequestState,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventPostAcquireRequestSt
ate, steps);
app.CreateEventExecutionSteps(HttpApplication.EventPreRequestHandlerExe
cute, steps);
steps.Add(new HttpApplication.CallHandlerExecutionStep(app));
app.CreateEventExecutionSteps(HttpApplication.EventPostRequestHandlerEx
ecute, steps);
app.CreateEventExecutionSteps(HttpApplication.EventReleaseRequestState,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventPostReleaseRequestSt
ate, steps);
steps.Add(new HttpApplication.CallFilterExecutionStep(app));
app.CreateEventExecutionSteps(HttpApplication.EventUpdateRequestCache,
steps);
app.CreateEventExecutionSteps(HttpApplication.EventPostUpdateRequestCac
he, steps);
this._endRequestStepIndex = steps.Count;
app.CreateEventExecutionSteps(HttpApplication.EventEndRequest, steps);
steps.Add(new HttpApplication.NoopExecutionStep()); |
|