ASP.NET之一般处理程序内部请求原理

本文探讨了ASP.NET中一般处理程序的工作原理,详细阐述了从浏览器发起请求到处理程序内部响应的过程。


原文出自:成都网站优化

第一步:游览器发送请求报文数据。

第二步:服务器接收数据,首先操作系统(分为内核模式和用户模式),首先交给内核模式,内核模式运行的是操作系统的核心文件,文件是Http.SYS(操作系统文件),该文件对请求报文做一个基本分析处理。
 
第三步:Http.SYS分析完成,交给用户模式(运行用户安装的软件),这是到IIS服务器了,IIS服务器对发送的请求报文进行解析,判断文件类型,如果是一个静态文件(.html,css,js,jpg等),IIS会直接读取这些文件的内容并且返回给游览器,如果请求的是动态文件,IIS处理不了,只能将内容映射给aspnet_isapi.dll文件。
 
第四步:aspnet_isapi.dll文件运行(加载.NetFrameWork运行时),开启一个工作进程(W3WP.EXE)。
 
第五步:进入.NetFrameWork,在进入.NetFrameWork里的ISAPIRuntime,在进入ISAPRuntime中的ProcessRequest方法,传递给该方法一个IntPtrecb句柄(请求报文资源编号)。
 
第六步:根据ecb句柄创建HttpWorkerRequest实例,该实例封装了最原始的请求报文的信息。
 
第七步:进入HttpRuntime,并且将HttpWorkerRequest传递到HttpRuntime.ProcessRequestNoDemand(wr)
 
第八步:调用RrocessRequestNow(wr);
 
第九步:调用_theRuntime.ProcesstInternal(wr);在该方法中根据传递过来的HttpWorkerRequest创建了HttpContext,最终请求报文的数据都封装到了HttpContext中。(在HttpContext中创建了HttpRequest与HttpResponse。)
 
第十步:IHttpHandler applicationInstance=HttpApplicationFactory.GetApplicationInstance(context);
创建了HttpApplication实例,该实例负责处理报文,将HttpContext传递到HttpApplication中,创建HttpApplication实例的过程是有一个HttpApplicationFactory工厂类,负责创建HttpApplication的实例,当在创建时先检查HttpApption池中是否有空闲的实例,如果有直接拿出来进行处理,如果没有则创建。   所谓的HttpApplication池就是一个栈。
 
第十一步:调用HttpApplication中的ProcessRequest方法进入管道。
管道中定义了19和个事件  20多个步骤。
第十二步:进入第8个事件,创建所访问的文件类型(页面类)的实例,并且这些类都都必须实现IHttpHandler接口。
第十三步:进入十一和十二个事件之间,执行用户所有访问的页面类里面的代码,
(执行的就是ProcessRequest方法)如果用户访问的是一般处理程序那么执行程序员写的代码、如果用户访问的是aspx,就执行Page_Load   返回游览器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值