• C#基础系列-HttpHandler、HttpModule、HttpApplication


    一、ASP.NET管道模型

    在IIS6.0中,通过工作进程w3wp.exe使用aspnet_isapi.dll加载.NET运行时,其中IIS6.0中引入应用程序池的概念,一个工作进程对应一个应用程序池,一个应用程序池对应一个或者多个Web应用,由IIS5.0的只能提供应用程序域的隔离级别到IIS6.0提供工作进程的隔离级别,可以提高应用程序之间的互不影响。由系统内核组件HTTP.SYS(可以监听多种协议的请求)持续监听HTTP请求,如果是该Web应用的第一次访问,运行时加载成功后,IIS通过AppDomainFactory为该Web应用创建一个应用程序域。

    此时特殊的运行时IsapiRuntime被加载开始接管HTTP请求IsapiRuntime首先会创建一个IsapiWorkerRequest对象来封装当前的HTTP请求,然后将此对象传递给ASP.NET运行时HttpRunTime,从此刻开始HTTP请求正式进入ASP.NET管道。

    依据ASP.NET管道模式,HttpRunTime会根据IsapiWorkerRequest对象创建用于表示当前HTTP请求的上下文对象HttpContext。随着HttpContext对象的创建,HttpRunTime会利用HttpApplicationFactory创建或获取现有的HttpApplication对象。

    HttpApplication负责处理当前的HTTP请求。在HttpApplication初始化过程中,ASP.NET会根据配置文件(系统配置和用户自定配置文件)加载并初始化注册HttpModule对象。对于HttpApplication来说,在它处理HTTP请求的不同阶段会触发不同的事件,而HttpModule(默认和用户自定义)的意义在于通过注册HttpApplication的相应事件,将所需的操作注入整个HTTP请求的处理流程。最终完成对HTTP请求的处理在HttpHandler中,不同的资源类型对应着不同类型的HttpHandler。

    二、HttpApplication

    HttpApplication是应用程序对象,负责处理分发给它的HTTP请求,ASP.NET 运行时维护一个HttpApplication对象池,当第一个请求到达时,ASP.NET会一次创建多个HttpApplication对象,并且将创建的对象置于对象池,然后选择其中一个对象处理HTTP的请求,每一次HTTP请求都会从对象池获取HttpApplication对象,HTTP请求与对象关联,并且只有该对象,直到请求结束后,HttpApplication对象不会被回收,而是返回对象池,以便后续服务于其他请求。

    HttpApplication对象代表一个请求实例,每次只能处理一个请求,其对象成员主要包含,上下文对象(HttpContext)、请求对象(HttpRequest)、请求响应对象(HttpResponse)、HTTP模块(HttpModule)通过配置文件加载要处理的所有模块、请求不同阶段要触发的事件。

    通过HttpModule注册相应的事件,从而将处理逻辑注入到HttpApplication处理请求的某个阶段。

     

    三、HttpModule

    HttpModule模块,提供模块初始化和处置事件以实现类,HttpModule在初始化的过程中,会将一些回调操作注册到HttpApplication相应的事件中,在HttpApplication请求处理生命周期的某一个阶段,相应的事件被触发,通过HttpModule注册的回调操作也会被执行。所以因为HttpModule模块机制,让ASP.NET具有高度可扩展。

    HttpMoudle提供的面向切面(AOP)编程,可以拦截HTTP请求,对HTTP请求的上下文对象(HttpContext)进行处理,处理完成后交给下一个模块,直到执行完所有Module。ASP.NET的管道事件配合Module的HTTP拦截器方式实现高可扩展性。

    ASP.NET内置很多HttpModule在系统配置文件C:WindowsMicrosoft.NETFrameworkv4.0.30319Config文件夹下的webconfig文件中,因为每一个项目都需要,所以统一配置到.NET Framework的默认和基础的配置中。

    HttpModule模块提供自定义的方式,加入对请求上下文对象的处理,实现相应的业务逻辑。

    在web.Config中配置模块,并且项目引用模块DLL。

    四、HttpHandler

    HttpHandler是一般处理程序,是针对某一类型的文件,映射给指定的处理程序对请求进行处理,是处理客户端的请求上下文的最后步骤。在系统配置文件中定义了内置的处理映射程序,也可以定义自定义文件类型的处理映射程序。

    在ASP.NET的webform中Page对象实现HttpHandler的接口,处理.aspx文件类型的处理程序,ASP.NET MVC则是MvcHttpHandler实现HttpHandler的接口,处理动态请求。

  • 相关阅读:
    从客户端中检测到有潜在危险的 Request.Form 值
    SqlBulkCopy(批量复制)使用方法 && SqlDataAdapter Update
    SQL Server 2014 清理日志
    GitHub for Windows 2.0使用教程
    C#.Net使用正则表达式抓取百度百家文章列表
    c#设计模式-单例模式【转】
    抽象类(abstract)【转】
    C# 与Java初始化顺序及异同(转)
    [转]VisualSVN错误 Cannot query proxy blanket解决办法
    [转]TortoiseSVN客户端重新设置用户名和密码
  • 原文地址:https://www.cnblogs.com/tuqunfu/p/14768620.html
Copyright © 2020-2023  润新知