`
冷寒冰
  • 浏览: 243197 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpHandler和HttpModule

 
阅读更多
HttpHandler和HttpModule  


ASP.NET的HTTP请求处理方法

当客户端向web服务器请求一个*.aspx的页面文件时,这个http请求也会被inetinfo.exe进程截获(www服务),它判断文件后缀之后,把这个请求转交给ASPNET_ISAPI.DLL而ASPNET_ISAPI.DLL则会通过一个Http PipeLine的管道,将这个http请求发送给ASPNET_WP.EXE进程,当这个HTTP请求进入ASPNET_WP.EXE进程之后,asp.net framework就会通过HttpRuntime来处理这个Http请求,处理完毕后将结果返回给客户端。

------------------------------------

当一个http请求被送入到HttpRuntime之后,这个Http请求会继续被送入到一个被称之为HttpApplication Factory的一个容器当中,而这个容器会给出一个HttpApplication实例来处理传递进来的http请求,而后这个Http请求会依次进入到如下几个容器中:

HttpModule --> HttpHandler Factory --> HttpHandler

当系统内部的HttpHandler的ProcessRequest方法处理完毕之后,整个Http Request就被处理完成了,客户端也就得到相应的东东了。

完整的http请求在asp.net framework中的处理流程:

HttpRequest-->inetinfo.exe->ASPNET_ISAPI.DLL-->Http Pipeline-->ASPNET_WP.EXE-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()

如果想在中途截获一个httpRequest并做些自己的处理,就应该在HttpRuntime运行时内部来做到这一点,确切的说时在HttpModule这个容器中做到这个的。

IHttpModule与IHttpHandler的区别主要有两点(实际上大家看MSDN时应该也注意到了):

    1.先后次序.先IHttpModule,后IHttpHandler.

    2.对请求的处理上:

IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.

IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.

如果我们自定义了一个针对"*.aspx"的HttpHandler类的话,那么系统会将对此http请求的处理权完全交给我们自己定义的这个HttpHandler类来处理,而我们自己的HttpHandler类则需要自己完全解析这个Http请求,并作出处理。

IHttpHandler接口中最重要的方法ProcessRequest,这个方法就是HttpHandler用来处理一个Http请求,当一个Http请求经过由HttpModule容器传递到HttpHandler容器中的时候,framework会调用HttpHandler的ProcessRequest方法来做对这个Http请求做真正的处理。

framework实际上并不是直接把相关页面的HTTP请求定位到一个内部默认的IHttpHandler容器之上的,而是定位到了其 内部默认的IHttpHandler Factory上了。IHttpHandler Factory的作用就是对很多系统已经实现了的IHttpHandler容器进行调度和管理的,这样做的优点是大大增强了系统的负荷性,提升了效率。

生命周期中涉及到几个非常重要的对象:

HttpHandler,HttpModule,IHttpHandlerFactory,

他们的执行(顺序)大致的执行过程是这样的:client端发送页面请求,

被IIS的某个进程截获,它根据申请的页 面后缀(.aspx)不同,

调用不同的页面处理程序(.asp->asp.dll; .aspx->ISAPI.dll).而页面处理程序在处理过程中,

则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,

后者HttpHandler进行真正的页面的处理。

<httpModules>

         <add name="test" type="MyHttpModuleTest.MyHttpModule,MyHttpModule"/>

       </httpModules>

   注意要区分大小写,因为web.config作为一个XML文件是大小写敏感的。

“type=MyHttpModuleTest.MyHttpModule,MyHttpModule”

告诉我们系统将会将http request请求交给位于MyHttpModule.dll文件中的MyHttpModuleTest.MyHttpModule类去处理。

HttpHandler是完全的对Http Request的截取。

<httpModules>

         <add name="test" type="MyHttpModuleTest.MyHttpModule,MyHttpModule"/>

       </httpModules>

   注意要区分大小写,因为web.config作为一个XML文件是大小写敏感的。

“type=MyHttpModuleTest.MyHttpModule,MyHttpModule”

告诉我们系统将会将http request请求交给位于

MyHttpModule.dll文件中的MyHttpModuleTest.MyHttpModule类去处理。

HttpHandler是完全的对Http Request的截取。

分享到:
评论

相关推荐

    ASP.NET架构详解HttpHandler和HttpModule高清PDF文字版

    本书详细讲解了ASP.NET请求流程.以及核心对象. ASP.NET架构详解HttpHandler和HttpModule高清PDF文字. 我身边的ASP.NET工程师都看过这个啦

    关于HttpHandler与HttpModule的理解和应用方法

    神秘的HttpHandler与HttpModule 大学时候我是从拖控件开始学习asp.net的,对.net的很多类库对象都不是很了解。所以看到大家写一些个性的asp.net名词,就感觉asp.net总有一层神秘的面纱笼罩着,让我琢磨不透,相信...

    HttpHandler HttpModule入门篇

    而页面处理程序在处理过程中,则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,后者HttpHandler进行真正的页面的处理。如前所说,HttpModule会在页面处理前和后对页

    HttpModule和httpHandler学习例子

    这是我学习HttpModule和httpHandler的时候写的例子。外加一份详细的学习资料Url(在博客上),详细你看到这些资料学他们也不难。

    Manage Media To Upload v1.0源码

    Manage Media To Upload v1.0源码 图片文件上传管理程序,实例程序使用MVC3.0编写。 项目描述 上传任何大小的文件在.NET。...web.config管理HttpHandler 和 HttpModule 成功测试在IIS6, IIS7, IIS7.5,开发者工具

    httpmodule和httphandler

    httpmodule和httphandler的区别和用法及例子

    HttpModule,HttpHandler详细解释

    HttpModule,HttpHandler详细解释

    HttpModule HttpHandler HttpHandlerFactory

    HttpModule HttpHandler HttpHandlerFactory 使用示例。

    HttpModule与HttpHandler

    HttpModule与HttpHandler! 值得下载看看!资源免费,大家分享!!

    asp.net 请求输入到输出的全过程及httpHandler和httpModuler详细介绍

    最近看了几篇讲述httpHandler和HttpModuler的文章,总的来说还是Fish li的那篇文章给力,但是他是大牛,他写出来的文章技术含量太高,对于像我这样的小兵, 要完全看懂估计需要看几遍。虽然说没有完全了解底层操作,...

    北京中科信软 Visual Basic.NET培训

    自定义HttpHandler与HttpModule,综合站点设计,N层架构设计 XML XMLDocument,XML Reader & Writer XML XPATH,XML XSLT,XML Schema XML & ADO.NET,XML & 配置文件 XML序列化 Web Service WSDL,SOAP,...

    Community Server专题三:HttpModule

    从专题三开始分析Community Server的一些具体的技术实现,根据IIS对请求的处理流程,从HttpModule& HttpHandler切入话题,同时你也可以通过一系列的专题了解CS的运行过程,不只如此,所有的.Net 1.1 构架的Web ...

    C#强化系列文章(共九篇)

    C#强化系列文章一:ViewState使用兼谈序列化.doc C#强化系列文章二:在C#中使用钩子 .doc ...C#强化系列文章八:HttpModule,HttpHandler,HttpHandlerFactory简单使用.doc C#强化系列文章九:代码访问安全性使用.doc

    asp.net中实现类似AOP功能

    HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。

    深入理解asp.net里的IHttpHandler

    ASP.NET Framework才调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

    Community Server专题.pdf

    HttpModule,HttpHandler,架构。。。这个专题讲解了CS的设计思想,学了很有启发

    Asp.Net及相关技术介绍

    HttpModule, HttpHandler, Ajax Jquery JS,Knockout JS 内容提纲如下: 1.三种Web服务主流架构的历史演变与示例。(XML-RPC,SOAP,REST) 2. REST兴起与Asp.Net WebAPI介绍。 3. Asp.Net WebAPI与相关技术...

    模拟程序让你明白 WCF 运行过程

    二、创建自定义HttpHandler实现对服务调用请求的处理 三、定义创建WCF组件的工厂 四、定义HttpModule映射WcfHandler 五、创建自定义的真实代理实现服务的调用 六、定义服务代理工厂 七、服务“寄宿”和调用

Global site tag (gtag.js) - Google Analytics