Asp.Net生命周期和Http管道技术
本篇主要介绍一下内容:
1.ASP.NET生命周期
2.Http运行时
3.Http管道技术
a)inetinfo.exe
b)asp.net_isapi.dll
c)aspnet_wp.exe
d)HttpHandler
e)HttpModule
4.实现Httphandler的使用
5.ASP.NET生命周期



6.(IIS)Web服务器(inetinfo.exe):
1.只有少数几种被客户端请求的资源类型由iis直接处理,如对Html页面,文本文件,jpeg和gif图像的传入请求
2.对ASP.NET资源(*.aspx,*.asmx,*.ashx)的请求将传递到ASP.NET ISAPI扩展,该系统组件是一个名为
aspnet_isapi.dll的Win32 Dll
7.aspnet_isapi.dll:可以处理多种资源类型,包括Web服务和Http处理程序调用
8.ASP.NET辅助进程(aspnet_wp.exe):
1.由aspnet_isapi.dll负责调用
2.aspnet_wp.exe负责控制请求的执行,并可以终止请求
9.aspnet_isapi.dll



用此命令进行 注册映射表,即将*.aspx与aspnet_isapi.dll关联起来
(注意:可以添加自己的映射,如将*.Refactor与aspnet_isapi.dll关联起来,这时候请求后缀名为Refactor的文件和请求*.aspx一样)

10.ISAPI与辅助进程的关系
1.ISAPI和辅助进程间的通讯是使用一组 "命名管道" 进行的
2.命名管道 是一种Win32机制,用于跨进程边界传输机制,命名管道的工作方式
与管道相似:在一端传入数据,在另一端输出相同的数据.建立管道既可以连接
本地进程,也可以连接远程计算机上运行的进程,对于本地进程间通讯,管道是
Windows中最有效,最灵活的工具.
3.ISAPI使用异步命名管道来将请求转发给 辅助进程并获得相应
4.辅助进程 在需要查询有关IIS环境的信息(即服务器变量)时又使用同步管道
5.ISAPI模块创建固定数量的 命名管道,并使用重叠的操作以通过小的线程池
处理同一时间进行的连接.当通过管道进行的数据交换操作结束后,完成例程
将断开客户端,并重新使用管道实例为新的客户端服务.线程池和重叠操作均
可以保证使ASP.NET ISAPI的性能达到令人满意的水平.
但是ASP.NET ISAPI扩展绝不会处理Http请求
11.ASP.NET的处理逻辑:
1.当请求到达时,IIS检查资源类型并调用ASP.NET ISAPI扩展.如果启用了默认的
进程模型,aspnet_isapi会将请求排队,并将请求分配给 辅助进程.所有的
请求数据都是通过异步I/O发送
2.收到请求后,ASP.NET辅助进程将通知ASP.NET ISAPI,它将为请求服务(建立管道)
3.在辅助进程的上下文中执行请求.有时,辅助进程可能需要回调ISAPI以完成请求,也就是
需要说枚举服务器变量.这种情况下,辅助进程将使用同步管道,因为这样可以保持
请求处理的逻辑顺序.
4.完成后,响应被发送到打开了异步管道的aspnet_isapi.如果aspnet_isapi检测到
辅助进程已取消,它将自动终止请求并释放所有相关的IIS资源
12.ASP.NET运行时环境
1.构成ASP.NET运行时环境的可执行文件

2.aspnet_filter.dll组件是一个小的Win32 ISAPI筛选器,用来备份ASP.NET应用程序的无Cookie会话状态
3.aspnet_state.exe的作用对Web应用程序更为重要,因为他用于管理会话状态
13.Http管道
1.在ASP.NET应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Requset),
ASP.NET应用程序的处理模式可称之为Http处理管道
2.HttpModule和HttpHandler就是这个处理管道上的两个处理环节

下图为 灰色部分的 示意图:

14.介绍上图各个类的作用
1.HttpWorkerRequest抽象类定义了ASP.NET页面处理请求的基本方法
2.HttpRuntime提供了处理应用的一组服务
3.HttpContext保存了处理一次请求的所有相关上下文信息
4.HttpApplicationFactory提供相关目录的应用程序
5.HttpApplicaiton定义了所有ASP.NET应用程序的通用的方法,属性和事件,这个类也是
在用户在global.asax文件中定义的应用基类
6.HttpModules处理请求前和响应后的事件
7.HandlerFactories提供应用程序中的Handlers
8.HttpHandlers处理请求和响应
15.HttpHandler
1.HttpHandler处理请求(Request)的信息和发送响应(Response)
2.HttpHandler实现类似于ISAPI Extention的功能
3.System.Web.UI.Page类也实现了HttpHandler接口
4.可以通过HttpHandler拦截请求,执行我们的自定义处理程序
16.HttpHandler示例
1.新建一个RefactorHandler类

public class RefactorHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpResponse response = context.Response;
HttpRequest request = context.Request; //获取用户请求的文件
string filePath = request.FilePath;
if (filePath.EndsWith("Refactor"))
{
response.Write("<html><body>欢迎来到我的博客:" +
"</br>" +
"<a href='http://www.cnblogs.com/refactor'>Refactor's blog http://www.cnblogs.com/refactor </a></body></html>");
}
} public bool IsReusable
{
get { return true; }
}
}

2.修改Web.config
在 <system.web>节点下添加:
<httpHandlers>
<add verb="*" path="*.Refactor" type="HttpHandlerAndHttpModule.RefactorHandler"/>
</httpHandlers>
3.测试

Asp.Net生命周期和Http管道技术的更多相关文章
- 【http】生命周期和http管道技术 整理中
httpModules 与 httpHandlers 正在写demo public class Httpext : IHttpModule { public void Dispose() { thr ...
- Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...
- Asp.Net生命周期系列三
上文讲到了HttpRunTime主要做了三个事情,我们先回忆一下. 第一:雇佣了项目经理(HttpApplication). 第二:建立了HttpModule列表,项目经理(HttpRunTime)就 ...
- Asp.Net生命周期系列五
如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了,而且我们可以注册自己的HttpModule并且可以在里面注册一些事件来控制这个Http请求,但是到目前 ...
- Asp.Net生命周期系列二
在上回书开始的时候我们提到博客园的IIS看了一眼我的请求后就直接交给ASP.NET去处理了,并且要求ASP.NET处理完之后返回HTML以供展示. 那么我们不仅要问: 1, IIS肯定是没有眼睛 ...
- ASP.NET生命周期详解
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- ASP.NET生命周期详解 [转]
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- Asp.net生命周期与Http协议
Http协议,底层的东西还是不是特别熟悉,感觉要经过沉淀之后才能理解这些东西吧 1.Asp.net生命周期 Asp.net生命周期: 从发起请求开始,到IIS进行处理的全部过程,然后再到获取结果 当请 ...
- (转)Asp.Net生命周期系列五
原文地址:http://www.cnblogs.com/skm-blog/p/3188697.html 如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了 ...
随机推荐
- bzoj 1025 DP
这道题根据群论的基础知识,我们可以转化成将n拆分成若干数,求这些数 的lcm的方案数 先筛下素数表prime 那么我们可以用DP来解决这个问题,用W[I,J]代表I这个数,拆成若干个数, 其中质因数最 ...
- hdu 4506 小明系列故事——师兄帮帮忙
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4506 题目大意:找规律,判断k的t次幂前面的系数. #include <iostream> ...
- Python爬虫学习 - day1 - 爬取图片
利用Python完成简单的图片爬取 最近学习到了爬虫,瞬时觉得很高大上,想取什么就取什么,感觉要上天.这里分享一个简单的爬取汽车之家文章列表的图片教程,供大家学习. 需要的知识点储备 本次爬虫脚本依赖 ...
- Ubuntu部署Java web项目
登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update 更新软件列表 输入: ...
- snakes
原地址 讨论区 Changing 算法一 我会随机! 由于我忘了设置多组数据,期望得分0至100. 算法二 我会模拟! 复杂度\(O(t^2)\),期望得分60. 但是很多人忘记题目给出的是环形-- ...
- qt include_directories没用
include_directories之后在.cpp文件中include.h文件没有路径补全说明qt没有找到该.h文件 问题解决: 在add_executable里加入那个.cpp文件就可以了 因为c ...
- 详解cookie与session的区别,讲得最透彻的一篇文章
在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...
- thinkphp实现功能:验证码
1.定义验证码函数 public function verify(){ /** * 在thinkPHP中如何实现验证码 * * ThinkPHP已经为我们提供了图像处理的类库ThinkPHP\Exte ...
- POJ 3553 Task schedule【拓扑排序 + 优先队列 / 贪心】
Task schedule Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 515 Accepted: 309 Special J ...
- 洛谷 P2415 集合求和【数学公式/模拟】
给定一个集合s(集合元素数量<=30),求出此集合所有子集元素之和. 输入输出格式 输入格式: 集合中的元素(元素<=1000) 输出格式: 和 输入输出样例 输入样例#1: 2 3 输出 ...