ASP NET MVC处理过程

  1. Windows内核模块HTTP.SYS监听到网络请求,分发给W3SVC
    IIS6引入,以驱动形式运行运行在Windows内核模式下,它是Windows 2003 的TCP/IP网络子系统的一部分,从结构上看它属于TCP上的一个网络驱动程序。他已经不属于IIS范畴,它的配置信息没有在IIS的元数据库(Metabase)中,而是定义在注册表。
    HTTP.SYS优点:
    持续监听:网络驱动程序,始终保持运行态,对用户HTTP请求及时响应
    更好稳定性:内核模式下,不执行用户代码,所以本身不会受到Web应用、工作进程、IIS进程的影响
    内核模式缓存:某资源频繁请求,HTTP.SYS会把相应内容缓存,后续请求直接响应。基于内核模式的缓存,不会和用户模式切换,响应速度极大改进
  2. W3SVC(World Wide Web Publishing Service)接收请求,传递给WAS
    IIS6中承载三大功能:接收HTTP请求、配置管理、进程管理。IIS7中后两种功能分配给了WAS
  3. WAS通过内置配置管理模块加载相关配置信息,并对相关组件进行配置,创建工作进程(w3wp.exe World Wide Web Work Process)
    WAS功能:
      配置管理:从元数据库(Metabase)中加载配置信息对相关组件进行配置
      进城管理:创建、监视、回收工作进程
    IIS5.x和IIS6.X基于Metabase的配置信息存储不同,IIS7.0将配置信息存放在XML形式的配置文件中
    WAS引入为IIS提供了对非HTTP协议的支持。WAS通过监听器适配器接口(Listener Adapter Interface)抽象出针对不同协议的监听器。除了基于网络驱动HTTP.SYS提供HTTP请求监听功能外还有TCP监听器、命名管道监听器、MSMQ监听器,以提供基于TCP、命名管道、MSMQ传输协议的监听支持。3中监听器对应三种监听适配器。
    IIS7中W3SVC更多的为HTTP.SYS起着监听适配器的作用。另外三种监听器和监听适配器以Windows服务形式体现,在服务控制管理器中可以找到。(详情MVC框架揭秘P17)
    W3SVC接收到的HTTP请求还是WCF提供的监听适配器接收到的请求都会传递给WAS
  4. 工作进程w3sp.exe中,它利用aspnet_isapi.dll加载.NET运行时(已加载不重复加载),创建对应Web应用的应用程序域(第一次请求时创建)
  5. 一个特殊运行时IsapiRuntime(System.Web.Hosting.dll )加载接管HTTP请求,创建IsapiWorkerRequest对象,用于封装当前HTTP请求,并将IsapiWorkerRequest对象传递给ASP.NET运行时的HttpRuntime
  6. 传递给HttpRuntime后正式进入ASP.NET管道。HttpRuntime根据IsapiWorkerRequest创建表示当前HTTP请求的上下文HttpPContext对象。HttpRuntime利用HttpApplicatinFactory创建新的或获取现有的HttpApplication对象。
    ASP.NET维护了一个HttpApplication对象池,HttpApplicationFactory从池中可用的HttpApplication中选取一个用于处理HTTP请求,处理完毕后放回对象池。HttpApplication负责处理当前HTTP请求
    HttpApplication初始化的过程中,会根据配合文件加载并初始化相应的HttpModule对象。对于HttpApplication来说,在它处理HTTP请求的不同阶段触发不同的事件,而HttpModule的意义在于通过HttpApplication的相应事件,将所需要的操作注入HTTP请求的处理流程。
    最终完成HTTP请求的处理实际在HttpHandler中。不同资源类型,具有不同的HttpHandler(.aspx:System.Web.UI.Page ;.svc:System.ServiceModel.Activation.HttpHandler) 
HttpApplicatin事件列表 
BeginRequest  开始  HTTP管道开始处理请求时
,会触发BeginRequest事件
AuthenticateRequest
PostAuthenticateRequest
 请求的身份验证  ASP.NET先后触发这两个事件
,使安全模块对请求进行身份验证
AuthorizeRequest
PostAuthorizeRequest
 进程授权  ASP.NET先后触发这两个事件
,使安全模块对请求进程进行授权
ResoleRequestCache
PostResoleRequestCache
 查询缓存  ASP.NET先后触发这两个事件
,以使缓存模块利用缓存的内容直接响应请求
PostMapRequestHandler  匹配Handler  对于访问不同的资源类型
,ASP.NET具有不同的HttpHandler对其进行处理。
对于每个请求,ASP.NET会通过扩展名选择匹配响应的HttpHandler类型
,成功匹配后,该实现被触发
AcquirRequestState
PostAcquirRequestState
 获取请求状态
(如Session)
 ASP.NET先后触发这两个事件
,使状态管理模块获取基于当前请求相应的状态,如SessionState
PreRequestHandlerExcute
PostRequestHandlerExcute
 处理请求  ASP.NET最终通过与请求资源类型相对应的HttpHandler处理请求
,实行HttpHandler前后,这两个实现被触发
ReleaseRequestState
PostReleaseRequestState
 释放请求状态  ASP.NET先后触发这两个事件
,使状态管理模块释放基于当前请求的状态
UpdateRequestCache
PostUpdateRequestCache
 写入输出缓存  ASP.NET先后触发这两个事件
,以使缓存模块将HttpHandler处理结果保存在输出缓存中
LogRequest
PostLogRequest
 记录日志  ASP.NET先后触发这两个事件为当前请求进行日志记录
EndRequest  结束  整个请求处理完成后,EndRequest事件被触发

 

 

 其他阅读1

参考: ASP.NET MVC4 框架揭秘

posted @ 2019-07-24 18:01  vvf  阅读(305)  评论(0编辑  收藏  举报