本文转至

ASP.NET页面运行机制以及请求处理流程

IIS处理页面的运行机制

IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页面,是因为IIS有一个ISAPI过滤器,它是一个COM组件ASP.NET服务在注册到IIS的时候,就会添加一个Win32的扩展动态库aspnet_isapi.dll。并将扩展可以处理的页面扩展名(如ASPX)注册到IIS里面。扩展启动后,就根据定义好的方式来处理IIS所不能处理的页面。

当客户端请求一个服务器资源时,这个HTTP请求会被inetinfo.exe进程截获(www服务),然后Check请求资源的类型,并依据资源映射信息(存储在IIS元库中,一种IIS专用的配置数据库)将请求的资源分配给特定的处理程序模块。若请求的是静态资源(img,text,html等)则由IIS处理(IIS在本地Web Server上访问请求的文件),将内容输出到控制台,发出请求的浏览器就能接收到它了。若需要在服务器端处理的请求,则会被传到已注册的扩展模块中,aspx请求会被分配给aspnet_isapi.dll,让这个程序开始处理代码,生成标准的HTML代码,然后将这些HTML加入到原有的HTML中,最后把完整的HTML返回给IIS,IIS再把内容发送到客户浏览器。

ASP.NET FrameWork对请求的处理:

上面说到IIS将像ASPX这样的页面分配给aspnet_isapi.dll,接着处理如下:

1、aspnet_isapi.dll则会通过一个Http PipeLine的管道将这个Http请求发给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe),之后asp.net framework就会通过HttpRuntime来处理这个Http请求。

2、HttpRuntime首先会确定处理该请求的类名,HttpRuntime通过公共接口IHttpHandler来调用该类获取被请求资源的类的实例。

3、调用HttpRuntime.ProcessRequest开始处理要发送到浏览器的页面,具体说就是创建一个HttpContext实例,它封装了所有与请求有关的http特有的信息,并初始化一个Write对象用于缓存标记代码。

4、HttpRuntime使用上下文信息查找或新建能处理该请求的WEB应用程序的对象。由HttpApplication Factory负责返回HttpApplication实例。

5、HttpApplication实例会读取web.config中所有HttpModule的配置。

5、HttpApplication对象使用IHttpHandlerFactory类型的实例返回HttpHandler(http处理程序)给HttpRuntime对象。一个页面只是个http处理程序对象。

6、最后由HttpRuntime对象调用IHttpHandler的页面对象的ProcessRequest方法。

最新文章

  1. 为什么PCB上的单端阻抗控制50欧姆
  2. SQL Server技术问题之游标优缺点
  3. 百度地图API说明
  4. DLL注入之注册表
  5. boost之function
  6. iOS开发--调试必备 — NSLog
  7. ural1057Amount of Degrees
  8. 运行tomcat7w.exe tomcat7.exe ,提示 指定的服务未安装 unable to open the service 'tomcat7'
  9. DOM2定位与高宽类属性专题学习【DOM专题学习系列(一)】
  10. Haxe UI框架StablexUI的使用备忘与心得(序)
  11. SpringMVC上传下载
  12. Web开发的发展
  13. soa服务治理-dubbo
  14. Linux配置全局jdk
  15. 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试
  16. Cocoapods pod update执行失败报错CocoaPods was not able to update the `master` repo.2019的解决
  17. 记录前台页面一些jQuery笔记
  18. iOS开发简记(1):指定APP的图标与启动图
  19. CTF-练习平台-Misc之 Linux??????
  20. shiro对事务的影响

热门文章

  1. -_-#【JS】isFinite
  2. MFC重绘函数:InvalidateRect(), Invalidate()和UpdateWindow()
  3. 【模拟】Codeforces 699A Launch of Collider
  4. tyvj P1431 [Tyvj Jan]分配任务(最大流)
  5. poj1065
  6. 【bzoj2333】 SCOI2011—棘手的操作
  7. OS开发 touch事件的优先级和事件传递
  8. Android Market 分析【安卓市场】
  9. Qt 学习之路 :Qt 模块简介
  10. GIT使用指南