`
myoldman
  • 浏览: 84933 次
  • 性别: Icon_minigender_1
  • 来自: 福建福州
最近访客 更多访客>>
社区版块
存档分类
最新评论

asp.net架构基础知识--httpmodule&HttpHandler

阅读更多
ISAPI过滤器(筛选器):IIS本身是不支持动态页面的,也就是说他仅仅支持静态HTML页面的内容,对于.asp .aspx .cgi .php等,IIS并不知道如果处理这些后缀标记,它就会把它当作文本,丝毫不做处理发送到客户端。为了解决这个问题,IIS有一种机制,叫做ISAPI的过滤器。它是一个COM组件。
ASP.NET服务在注册到IIS的时候,会把每个扩展可以处理的文件扩展名注册到IIS里面(如*.ascx *.aspx等)。扩展启动后,就根据定义好的方式来处理IIS所不能处理的文件,然后把控制权跳转到专门处理代码的进程中,asp.net中是aspnet_isapi.dll。让这个进程开始处理代码,生成标准的HTML代码,生成后把这些代码加入到原有的HTML中,最后把完整的HTML返回给IIS,IIS再把内容发送到客户端。
HttpModule
Http模块实现了过滤器(ISAPI filter)的功能,它是实现了System.Web.IHttpModule接口的.net组件。。这些组件通过在某些事件中注册自身,把自己插入到ASP.NET请求处理管道。当这些事件发生的时候,ASP.NET调用对请求有兴趣的HTTP模块,这样该模块就能处理请求了。有时候需要过虑一下http请求,注意它不是覆盖其他的包括系统自带的HttpModule,在Machine.config中配置完成。
HttpHandler
它实现了ISAPI Extention的功能,它处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的通过必须实现IHttpHandler接口。HTTP处理程序是实现System.Web.IHttpHandler接口的.NET组件。任何实现了该接口的类都可以用于处理输入的Http请求。它就是Http处理程序。

ASP.NET的HTTP请求处理方法
当客户端向web服务器请求一个*.aspx的页面文件时,同asp类似,这个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这个容器中做到这个的。
----------------------------------------
-------------------------------------
系统本身的HttpModule实现一个IHttpModule的接口,当然我们自己的类也能够实现IHttpModule接口,这就可以替代系统的HttpModule对象了。
ASP.NET系统中默认的HttpModule:

DefaultAuthenticationModule 确保上下文中存在 Authentication 对象。无法继承此类。 
FileAuthorizationModule 验证远程用户是否具有访问所请求文件的 NT 权限。无法继承此类。 
FormsAuthenticationModule 启用 ASP.NET 应用程序以使用 Forms 身份验证。无法继承此类。 
PassportAuthenticationModule 提供环绕 PassportAuthentication 服务的包装。无法继承此类。 
SessionStateModule 为应用程序提供会话状态服务。 
UrlAuthorizationModule 提供基于 URL 的授权服务以允许或拒绝对指定资源的访问。无法继承此类。 
WindowsAuthenticationModule 启用 ASP.NET 应用程序以使用 Windows/IIS 身份验证。无法继承此类 

--------------------------------------
这些系统默认的HttpModule是在文件machine.config中配置的,和我们开发时使用到的web.config的关系是:是在ASP.NET FRAMEWORK启动处理一个Http Request的时候,它会依次加载machine.config和请求页面所在目录的web.config文件,如果在machine中配置了一个自己的HttpModule,你仍然可以在所在页面的web.config文件中remove掉这个映射关系。
-----------------------------------------------------------------------------------
深入HttpModule
一个Http请求在被ASP.NET Framework捕获之后会依次交给HttpModule以及HttpHandler来处理。hm与hh之间不是完全独立的,实际上,http请求在hm传递的过程中会在某个事件内将控制权转交给hh的,而真正的处理在HttpHandler中执行完成后,HttpHandler会再次将控制权交还给HttpModule
上面的代码中的HttpModule的Init()中的参数是HttpApplication类型,它具有许多事件,包括BeginRequest,EndRequest,AuthentiacteRequest 等等。
-----------------------------------------------------------------
IHttpHandler
它是asp.net Framework提供的一个接口,定义了如果要实现一个Http请求的处理所需要必须实现的一些系统约定。也就是说,如果你想要自行处理某些类型的HTTP请求信息流的话,你需要实现这些系统约定才能做到。譬如一个*.aspx文件,用来处理此类型的Http请求,ASP.NET FRAMEWORK将会交给一个名为System.Web.UI.PageHandlerFactory的HttpHandler类来处理。
HH和HM一样,系统会在最初始由ASP.NET FRAMEWORK首先加载machine.config中的HttpHandler,而后会加载Web应用程序所在目录的web.config中的用户自定义的HttpHandler类。但是系统与我们自定义的HH之间的关系是"覆盖"的,也就是说如果我们自定义了一个针对"*.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容器进行调度和管理的,这样做的优点是大大增强了系统的负荷性,提升了效率。
分享到:
评论
1 楼 walkingp 2010-07-05  
非常好的一篇文章,再能配上插图就更好了!

相关推荐

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

    在这个主题中,我们将深入探讨ASP.NET架构中的两个关键组件:HttpHandler和HttpModule。 **HttpHandler**是ASP.NET处理HTTP请求的核心组件。每个HTTP请求都会被路由到一个特定的HttpHandler,它负责处理特定类型的...

    深入解析ASP.NET架构

    深入理解ASP.NET架构,尤其是其请求处理流程、HttpModule与HttpHandler的运用,以及事件模型机制,对于开发高性能、高可用性的Web应用至关重要。通过掌握这些核心概念,开发者可以更好地设计、调试和优化ASP.NET应用...

    asp.net网络技术

    1. **ASP.NET架构**:ASP.NET框架包括几个关键组件,如ASP.NET页面生命周期、HttpApplication、HttpModule和HttpHandler。页面生命周期管理着从请求到达服务器到响应返回客户端的整个过程,包括初始化、加载、验证、...

    ASP.NET基础实例教程(C#)

    本教程针对ASP.NET的基础使用,结合C#编程语言,旨在帮助初学者快速掌握Web开发的核心概念和技术。 在ASP.NET中,我们主要会接触到以下知识点: 1. **基本架构**:ASP.NET采用了事件驱动模型,网页的生命周期包括...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    在讲解ASP.Net基础后安排这样一个B2C网上商城系统,让学员在实际项目中将学到的知识学以致用。 2、办公自动化OA系统。这是一个典型的基于ASP.Net技术的OA协同办公项目,包含了权限管理、公告管理、文档管理、工作流...

    asp.net项目开发实践

    总的来说,ASP.NET项目开发实践涵盖了广泛的技能和知识,包括Web编程基础、框架原理、数据库操作、安全控制、性能优化等多个方面。开发者需要不断学习和实践,以适应技术的快速发展和企业的需求变化。

    Pro ASP.NET Extensibility

    这本书涵盖了一系列核心主题,从基本的ASP.NET架构到高级的自定义模块和中间件开发,为有经验的ASP.NET开发者提供了丰富的知识。 ASP.NET是微软推出的一个用于构建动态网站、web应用和web服务的开发框架。它基于...

    130道ASP.NET面试题

    1. **ASP.NET架构**:了解ASP.NET的工作原理,包括请求生命周期、页面生命周期以及各组件如HttpModule、HttpHandler、Control等的角色。 2. **Web Forms与MVC比较**:对比ASP.NET Web Forms和ASP.NET MVC两种模式的...

    ASP.NET学习大全(Jet wang 最新整理)

    1. ASP.NET架构:了解ASP.NET的核心组成部分,包括ASP.NET页面生命周期、HttpApplication、HttpModule和HttpHandler等,以及它们在处理Web请求中的角色。 2. .NET Framework:ASP.NET是建立在.NET Framework之上的,...

    【ASP.NET编程知识】基于asp.net MVC 应用程序的生命周期(详解).docx

    总结起来,ASP.NET MVC 应用程序的生命周期是一个复杂而有序的过程,从HttpApplication开始,经过HttpModule的预处理,到HttpHandler的最终处理,期间涉及路由、控制器选择、动作方法执行以及视图渲染等多个环节。...

    ASP.NET 2.0快速入门(15):ASP.NET 2.0 的扩展应用

    2. **自定义HttpHandler和HttpModule**:HTTP处理器(HttpHandler)和HTTP模块(HttpModule)是ASP.NET处理请求的关键组件。开发者可以通过编写自定义的HttpHandler来处理特定类型的HTTP请求,比如处理静态文件、流...

    ASP.NET 2.0网络开发技术 PDF文档

    第二章:ASP.NET 2.0架构 这一章会详细介绍ASP.NET 2.0的运行时环境和生命周期,解释请求处理流程,以及控件如何在服务器上进行操作。你将了解到HttpApplication、HttpModule和HttpHandler等核心组件的工作原理。 ...

    基于ASP.NET的企业客户管理项目设计与实现cms项目设计与实现(源代码+录像演示).zip

    1. **ASP.NET架构与工作原理** ASP.NET基于页面生命周期模型,当用户请求一个页面时,ASP.NET会通过一系列步骤处理请求,包括初始化、绑定事件、呈现和卸载等。此外,ASP.NET支持多种编程模型,如Web Forms、MVC和...

    ASP.NET源码——[搜索链接]zhao53搜索引擎.zip

    通过研究这个"zhao53搜索引擎"的源码,开发者不仅可以学习到ASP.NET的基础知识,还能深入理解搜索引擎的工作原理,提升在实际项目中的应用能力。同时,对于想要了解如何在ASP.NET环境下构建大型Web应用的人来说,这...

    一个优秀的ASP.NET(及WinForm)开发人员需要知道

    ### 优秀 ASP.NET 及 WinForm 开发人员所需掌握的核心知识点 #### 一、ASP.NET 和 WinForm 基础概念 **1.1 什么是 .NET Framework** .NET Framework 是微软开发的一个软件框架,用于创建各种类型的应用程序,包括...

    ASP.NET与XML 视频播放,适合初学者学习或直接拿来用

    在视频播放的场景中,ASP.NET可以通过HttpHandler或HttpModule来处理视频流,提供视频内容。而XML可以用来存储视频元数据,如标题、时长、作者等信息,便于在前端展示和搜索。结合ASP.NET的GridView、Repeater等控件...

    ASP.Net动态网站编程指南

    ASP.NET是微软开发的一种用于构建Web应用程序的框架,它...ASP.NET还支持MVC(Model-View-Controller)架构,提供更好的代码组织和测试性。在实际开发中,理解并熟练运用这些概念和技术,能够提升开发效率和应用质量。

    基于ASP.NET的学生信息管理系统工程

    此外,ASP.NET的模块化设计使得系统易于扩展,可以通过添加自定义HttpModule和HttpHandler来增强功能。 8. **错误处理与调试**:ASP.NET提供了丰富的错误处理机制,如全局错误处理、自定义错误页面等,便于调试和...

Global site tag (gtag.js) - Google Analytics