学习篇:asp.net mvc 管道模型

首先,客户端发送url请求→Http://localhost/Home/Index. 这时,服务端的内核模块中的 HTTP.SYS组件监听着80端口发来的请求。HTTP.SYS访问注册表,查看来的这种请求交给谁处理,然后返回信息给HTTP.SYS。HTTP.SYS一看,发现要交给IIS来处理。IIS里面有两个比较重要的进程INetInfo.exe(IIS的核心进程-存放元数据信息)和svchost.exe。

这里面有个w3svc服务,去和INetInfo.exe交互,取出需要的信息。然后交给具体的WorkProcess处理。WorkProcess就是工作进程,.net代码执行所在的宿主。

这里跑着w3wp.exe(iis6)进程。 w3svc将信息传递到aspnet_isapi.dll(非托管的com组件):职责→负责启动Net运行时,负责将请求信息交给运行时。下一步到了httpRunTime.

将请求信息交给ISAPIRuntime的pr方法,通过ecb创建workRequest→HttpRuntime的PR方法,通过wr创建HttpContext(请求:HttpRequest,响应:HttpResponse,Session,cookie等...)→HttpApplicationFactory获取HttpApplication实例。

1.如果第一次请求:编译golabl.asax或HttpApplication类型,创建特殊应用池,调用特殊应用池里面的特殊HttpApplication对象的Application_start()方法。

2.从池子中获取一个HttpApplication实例,如果池子空的就直接创建一个实例(反射得到,类型是上面glable.asax类型)

HttpApplication实例被反射出来的时候,会调用Init()//初始化的方法。内部是初始化所有的HttpModule(通过配置文件中配置的所有的HttpModule)调用所有HttpModule的Init()方法。

然后,就是那19个事件。。(等待下次总结,脖子好累。。。。)

睡觉了 .....这个用reflector神器,来看下里面就OK了。。。。

posted @ 2012-11-04 01:43  2月18号  阅读(1695)  评论(0编辑  收藏  举报