日期:2014-05-17  浏览次数:20342 次

我对URL请求流程的理解
我这2天看了,ASP.NET请求流程:

这部分都是参考网上资料的
url
-->
iis
-->
aspnet_isapi.dll
-->
进入某个网站的AppDomain,也就是每个网站都有一个自己的AppDomain(实际上winform也有各自的AppDomain)
-->
在AppDomain中调用ISAPIRuntime.ProcessRequest()方法进入ASP.NET,并根据请求信息生成HttpWorkerRequest对象。
-->
调用HttpRuntime.ProcessRequestInternal(HttpWorkerRequest对象)
-->
生成HttpContext对象
根据HttpContext对象调用HttpApplicationFactroy来生成IHttpHandler,即HttpApplication对象

之后流程的网上说的不是很清楚,我自己的理解如下。
-->
HttpApplication对象初始化,对所有HttpModule对象的初始化,此时每个HttpModule对象可以绑定HttpApplication对象的19个事件
-->
执行还没到HttpApplication对象.PreRequestHandlerExecute之前的所有事件对应的方法。如Application_OnBeginRequest方法
-->
在调用HttpApplication对象.PreRequestHandlerExecute前,通过HttpHandlerFactory来生成HttpHandler对象,执行在调用HttpApplication对象.PreRequestHandlerExecute。
这里就牵涉到页面的生命周期了,页面生命周期不在此处讨论。
-->
执行HttpApplication对象.PreRequestHandlerExecute之后的所有事件对应的方法。如Application_OnEndRequest方法

这样理解可以么?
------解决方案--------------------
前面那段是iis 7以下或经典模式的流程
iis7集成模式不太一样
http://msdn.microsoft.com/zh-cn/library/bb470252%28v=vs.100%29.aspx
------解决方案--------------------
引用:
之后流程的网上说的不是很清楚,我自己的理解如下。
-->
HttpApplication对象初始化,对所有HttpModule对象的初始化,此时每个HttpModule对象可以绑定HttpApplication对象的19个事件........


这个流程,你应该看看 Page 类型的 
private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)
方法的源代码。

并且,如果你有动态加载子控件的应用,也应该看看 Control 类型的
protected internal virtual void AddedControl(Control control, int index)
方法的源代码。

单纯说理论都是废话,只有结合源代码才算是入门了。