以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Dot NET,C#,ASP,VB 』 (http://bbs.xml.org.cn/list.asp?boardid=43) ---- Asp.Net页面执行流程分析 (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=67566) |
-- 作者:kelvinmok -- 发布时间:9/23/2008 11:00:00 AM -- Asp.Net页面执行流程分析 在我的上一篇文章中说到了HttpModule、HttpHandle的简单使用,我 们可以利用它们在页面请求的过程中加入自己的事件处理程序。那么在一个aspx 页面请求时后台到底做了什么?当然asp.net做了很多事情,过程也比较复杂,本 文主要分析一下大体的流程。总体流程如下: 的后缀,然后根据IIS中的配置来决定调用哪个扩展程序,比如aspx的页面就会调 用c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,aspne t_isapi.dll将请求发送给w3wp.exe进程(我们在调试IIS中网站时就是把VS2005附 加到这个进程上的)。 >HttpModule--HttpHandlerFactory-->HttpHandler 这也是本文主要分析的地方 。 下面只是列出主要流程,如果喜欢钻研的同学可以用Reflector去查看 HttpRuntime.AppDomainAppPathInternal; StringUtil.EqualsIgnoreCase(appPathTranslated, appDomainAppPathInternal)) HttpRuntime.ShutdownAppDomain(ApplicationShutdownReason.PhysicalApplica tionPathChanged, SR.GetString("Hosting_Phys_Path_Changed", new object[] { appDomainAppPathInternal, appPathTranslated })); 前请求的所有信息,然后传递给HttpRuntime,这里生成的HttpWorkerRequest对 象可以直接在我们的页面中调用的,通过它取得原始的请求信息: (IServiceProvider)HttpContext.Current; (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest)); 法: context = new HttpContext(wr, false); HttpApplicationFactory.GetApplicationInstance(context); this._handlerCompletionCallback, context); 家都很熟悉的,它包含request、response等属性,在页面中经常会用到的; ttpApplication对象,HttpApplication也是IHttpHandler接口的一个实现) internal static string GetApplicationFile() "global.asax"); n对象,从这里我们可以看到global.asax的文件名是在asp.net的框架中写死的, 不能修改的。如果这个文件不存在就使用默认的对象。 HttpRuntime.CreateNonPublicInstance(this._theApplicationType); ApplicationImpersonationContext()) this._eventHandlerMethods); private void InitModules() RuntimeConfig.GetAppConfig().HttpModules.CreateModules(); 程序接着进行事件实际绑定: app.CreateEventExecutionSteps(HttpApplication.EventBeginRequest, steps); steps); n, steps); est, steps); steps); , steps); steps); che, steps); r, steps); steps); ate, steps); cute, steps); ecute, steps); steps); ate, steps); steps); he, steps); allHandlerExecutionStep就是对Handle程序进行处理的,也就是说在web.config 中配置的HttpHandler都是在这里进行处理的,执行顺序如上所示 context, AsyncCallback cb, object extraData) extraData); 转自www.gdglc.com |
-- 作者:kelvinmok -- 发布时间:10/28/2008 10:35:00 AM -- 五、HttpModule 在系统web.config中默认的配置有: Code <httpModules> <add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/> type="System.Web.SessionState.SessionStateModule"/> type="System.Web.Security.WindowsAuthenticationModule"/> type="System.Web.Security.FormsAuthenticationModule"/> type="System.Web.Security.PassportAuthenticationModule"/> type="System.Web.Security.RoleManagerModule"/> type="System.Web.Security.UrlAuthorizationModule"/> type="System.Web.Security.FileAuthorizationModule"/> type="System.Web.Security.AnonymousIdentificationModule"/> type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 六、HttpHandlerFactory、HttpHandler type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> type="System.Web.Handlers.TraceHandler" validate="true"/> type="System.Web.Handlers.AssemblyResourceLoader" validate="true"/> validate="true"/> type="System.Web.UI.PageHandlerFactory" validate="true"/> type="System.Web.UI.SimpleHandlerFactory" validate="true"/> type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.StaticFileHandler" validate="true"/> type="System.Web.StaticFileHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> validate="true"/> validate="true"/> validate="true"/> validate="true"/> validate="true"/> validate="true"/> validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> validate="true"/> validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.Web.HttpForbiddenHandler" validate="true"/> type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> type="System.Web.DefaultHttpHandler" validate="true"/> type="System.Web.HttpMethodNotAllowedHandler" validate="true"/> 这里我们重点看一下aspx的配置:System.Web.UI.PageHandlerFactory (我们自己的Page页面都是一个IHttpHandler): typeof(Page), context, true, true) as Page; type="System.Web.Compilation.PageBuildProvider"/> type="System.Web.Compilation.UserControlBuildProvider"/> type="System.Web.Compilation.MasterPageBuildProvider"/> type="System.Web.Compilation.WebServiceBuildProvider"/> type="System.Web.Compilation.WebHandlerBuildProvider"/> type="System.Web.Compilation.WebServiceBuildProvider"/> type="System.Web.Compilation.ResXBuildProvider"/> type="System.Web.Compilation.ResourcesBuildProvider"/> type="System.Web.Compilation.WsdlBuildProvider"/> type="System.Web.Compilation.XsdBuildProvider"/> type="System.Web.Compilation.ForceCopyBuildProvider"/> type="System.Web.Compilation.IgnoreFileBuildProvider"/> type="System.Web.Compilation.IgnoreFileBuildProvider"/> type="System.Web.Compilation.IgnoreFileBuildProvider"/> type="System.Web.Compilation.IgnoreFileBuildProvider"/> type="System.ServiceModel.Activation.WorkflowServiceBuildProvider, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 这样就可以进入我们的Page执行了,大的执行顺序可以参见第四部分的描述,它 也就是一个HttpHandler.q |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
93.750ms |