asp.net管道模型(管线模型)(内容转载至博客园)
来源:互联网 发布:python arma模型 编辑:程序博客网 时间:2024/05/01 00:35
asp.net管道模型(管线模型)(内容转载至博客园)
前言
为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看资料的时候遇到不明白的地方又横向地查阅了其他相关的资料,而收获比当初预想的大了很多。
有本篇作基础,下面两篇就更好理解了:
理解并自定义HttpHandler
理解并自定义HttpModule
目录
一般不写目录,感觉这次要写的东西有些多就写一个清晰一下吧。
1.Asp.net管道模型;
2.进程的子进程与进程的线程;
3.应用程序域(AppDomain);
4.IIS5.x下一个HTTP请求/响应过程的整体框架
5.IIS5.x、IIS6.x和IIS7.x的区别
Asp.net管道模型
参考:ASP.NET使用管道模型(PipleLines)处理HTTP请求
HttpRuntime的认识与加深理解
HttpModule的认识(转载)
管道模型中包含以下对象:
流程图:
Http Request传到工作进程(IIS5.x为aspnet_wp.exe,IIS6.x和IIS7.x为w3wp.exe)后,工作进程实例中通过ISAPIRuntime(主要作用是调用一些非托管代码生成HttpWorkerRequest对象,HttpWorkerRequest对象包含当前请求的所有信息,然后传递给HttpRuntime)传递HttpWorkerRequest对象给HttpRuntime并调用HttpRuntime的ProcessRequest方法,HttpRuntime为管道模型的入口此时正式进入管道模型。
HttpRuntime根据HttpWorkerRequest对象生成HttpContext,HttpContext包含request、response等属性, 再调用HttpApplicationFactory的GetApplicationInstance方法生成HttpApplication, HttpApplication对象包含多个HttpModule对象(当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用),并调用各个HttpModule对象的Init方法初始化HttpModule,在Init方法中可以订阅HttpApplication的事件从而作出相应的处理。当HttpApplication执行到Application_ResolveRequestCache时暂时将控制权交给HttpHandler并根据HttpHandler中是否启用SessionState来确定是否生成会话跟踪功能(.aspx中用enablesessionstate设置,.ashx中用是否继承IRequiresSessionState接口来设置),然后HttpApplication继续执行自身的事件直到执行完PreRequestHandlerExecute事件就根据URL请求的后缀名获取HttpHandlerFactory对象(默认情况下.aspx调用System.Web.UI.PageHandlerFactory,.ashx调用System.Web.UI.SimpleHandlerFactory),调用HttpHandlerFactory的GetHandler方法生成具体的HttpHandler对象或调用ReleaseHandler方法使工厂可以重用现有的处理程序实例来处理http请求并返回http响应,再经过HttpApplication对象的一系列事件(具体事件请参考HttpModule的认识(转载))最终返回到客户端,当然http响应所经过的HttpApplication的一系列事件都可以被HttpModule对象所订阅。
进程的子进程与进程的线程
参考:百度问答
我拿Windows举例子吧, 因为Linux的内核好像是没有线程概念的.进程和线程的区别在于粒度不同, 进程之间的变量(或者说是内存)是不能直接互相访问的, 而线程可以, 线程一定会依附在某一个进程上执行.我举个例子, 你在Windows下开一个IE浏览器, 这个IE浏览器是一个进程. 你用浏览器去打开一个pdf, IE就去调用Acrobat去打开, 这时Acrobat是一个独立的进程, 就是IE的子进程.而IE自己本身同时用同一个进程开了2个网页, 并且同时在跑两个网页上的脚本, 这两个网页的执行就是IE自己通过两个线程实现的.值得注意的是, 线程仍然是IE的内容, 而子进程Acrobat严格来说就不属于IE了, 是另外一个程序.之所以是IE的子进程, 只是受IE调用而启动的而已.
追问:那我可不可以这样理解,父进程创建了一个子进程,只要给这个子进程分配一定的任务,他们从此就没有关系了 。。。。
回答:也不能这么说从此就没关系了, 父进程还是可以通过和子进程通信来获得一些信息的. 拿上面的例子来说,
IE可以通过一些进程间通信的接口来知道Acrobat是否顺利的把pdf打开了之类的信息. 但有一点我觉得你的理解基本正确,
就是父进程和子进程是独立的. 假如IE开了一个病毒子进程, 子进程不听话, 父进程也没什么特别的办法, 除了向系统申请去关闭它之外.
AppDomain之间不能直接交互,可通过代理的方式进行数据交互(如果是进程就使用IPC)。(具体实现以后探讨!)
IIS5.x下一个HTTP请求/响应过程的整体框架
上图左边为IIS5.X WEB SERVER,右边为Asp.net Application的工作进程(worker process),Asp.net是以作为IIS组件的形式扩展IIS的。
参考:各版本IIS下ASP.net请求处理过程区别
当一个http request发送到IIS5.X时,IIS先把虚拟目录转变为物理目录,然后根据文件后缀名检查iis中的metabase文件检查文件扩展名与可执行代码(扩展程序)映射记录(如.aspx、.ashx等对应aspnet_isapi.dll),如果metabase文件中没有就再检查是否为不受服务器端保护的文件(受服务器端保护:App_Code文件夹下的文件;不受服务器端保护:css、js文件),如果都不存在则直接返回404HTTP状态码给客户端;(该查找循序可通过《理解并自定HttpHandler》)存在则iis的inetinfo.exe实例会调用相应的可执行代码(这里是aspnet_isapi.dll),aspnet_isapi.dll会通过一个命名管道(named pipe,一种简单的IPC——进程通信机制,具体内容请参考:《命名管道及延伸进程通信学习》)把从inetinfo.exe获取的request异步转发到Asp.net工作进程实例:aspnet_wp.exe,然后就进入管道模型。同时aspnet_isapi.dll通过named pipe监测工作进程的运行状况,如果工作进程性能低于某个值aspnet_isapi.exe就会杀死工作进程,当下一个请求传递过来时重新启动一个工作进程处理请求。而工作进程通过named pipe同步请求web server的信息(如调用Server对象获取服务器信息)。
IIS5.x、IIS6.x和IIS7.x的区别
总结 本篇是参考了各位大哥的整理、总结后个人的一个归纳总结,以后继续完善!! 转载请标明出处哦!http://www.cnblogs.com/fsjohnhuang/archive/2012/01/19/2327296.html
- asp.net管道模型(管线模型)(内容转载至博客园)
- Asp.net管道模型(管线模型)
- ASP.NET 管道模型
- ASP.NET 管道模型
- 【ASP.NET】管道模型
- 【ASP.NET】管道模型
- ASP.NET使用管道模型(PipleLines)处理HTTP请求
- ASP.NET使用管道模型(PipleLines)处理HTTP请求
- ASP.NET 页面周期(一):管道处理模型
- ASP.NET使用管道模型(PipleLines)处理HTTP请求
- ASP.NET Web API 管道模型
- 学习篇:asp.net mvc 管道模型
- 转:ASP.NET使用管道模型(PipleLines)处理HTTP请求
- ASP.NET 页面对象模型(转载)
- ASP.NET中Session模型简介(转载)
- linux 管道 (双向管道流模型)
- ASP.NET Core轻松入门之Middleware管道模型
- ASP.NET组件模型 (非原创)
- 关于J2EE中过滤器的使用
- 程序的内存及标识符的存储属性(三)
- first python program
- java mail 删除邮件 四
- Hdu 3062 Party
- asp.net管道模型(管线模型)(内容转载至博客园)
- php实践
- == 值得关注的技术人 ==
- JSP设计模式
- 第一篇博客
- OpenGL ES Shading Language : array
- 时空数据模型
- 设计模式一(工厂方法、抽象工厂、单例)
- iphone 3d programming : clean project