解析Asp.Net页面执行流程(2)_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:如何用.NET读取 Flash格式文件信息
一直以来存在这么一个问题,就是当用户上传的Flash文件时都需要附带输入Flash的宽和高,否则显示的时候由于不知道这些数值而导致Flash比例不正常。 近日我做网站也涉及到了这方面的问题

正如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());

原文地址:http://bbs.mb5u.com/Design/thread-1167995-1-1.html

分享:解析VC.NET扩展Windows磁盘清理工具的功能
摘 要 介绍了Windows磁盘清理工具二次开发的扩展接口,对其COM接口加以分解,并运用ATL库具体实现了清理“*.tmp”临时文件的功能。 关键词 磁盘清理工具、ATL库、COM接口。

来源:模板无忧//所属分类:.Net教程/更新时间:2009-09-15
相关.Net教程