ASP.Net中自定义Http处理及应用之HttpHandler篇

发布时间: 2007-01-28 01:09    作者: 未知    来源: 未知    浏览:    评论

[日期:2003-08-25] 来源:赛迪网  作者:孙亚民 [字体: ]
 
  在开发基于Microsoft IIS的应用时,开发者除了可以编写ASP程序外,还可以使用Visual C++等开发工具,开发ISAPI应用,以获取更为强大的功能。可以编写两种ISAPI扩展:一种是ISAPI Server Extention,另一种是ISAPI Filter,但是,ISAPI扩展应用的编写通常对开发者有比较高的要求,开发和部署的难度比较大。

在开发ASP.Net应用时,我们仍然可以编写ISAPI应用,以扩充IIS的功能,但是,ASP.Net为我们提供了另外一种选择——使用HTTP Handler 和HTTP Module。这是通过使用IHttpHandler 和 IHttpModule接口来实现的。HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能,并且,比ISAPI,在开发和部署上都要简单的多。

应用HttpHandler和HttpModule,使应用程序可以与IIS Web服务器的低级别请求和响应服务交互。本文首先介绍HttpHandler和HttpModule的概念和基本使用方法,并介绍了一个应用HttpModule实现权限系统的案例。

HTTP 处理管道的基本模型


要对HttpModule和IHttpHandler进行研究,必须先对ASP.Net的处理管道有一个了解。

在ASP.Net应用程序中,系统使用一组相关的类,通过一定的顺序来处理客户端的请求(Request),ASP.NET应用程序的处理模式可称之为HTTP处理管道。HttpModule和IhttpHandler就是这个处理管道上的两个处理环节。

HTTP处理管道中的类在System.Web名称空间中定义,主要有以下类型:

· HttpWorkerRequest 抽象类定义了ASP.Net页面处理请求的基本方法;

· HttpRuntime 提供了处理应用的一组服务;

· HttpContext 保存了处理一次请求的所有相关上下文信息;

· HttpApplicationFactory 提供相关目录的应用程序;

· HttpApplication 定义了所有ASP.Net应用程序的通用的方法、属性和事件。这个类也是在用户在global.asax文件中定义的应用的基类;

· Modules 处理请求前和响应后的事件;

· HandlerFactories 提供应用程序中的Handlers;

· Handlers 处理请求和响应。

HTTP处理管道的模型如下:



图1:HTTP 处理管道


在Windows平台上,HTTP Pipline需要IIS的支持。为了运行ASP.NET应用,IIS需要以下两个文件:ASPNET_ISAPI.DLL和ASPNET_WP.EXE

· ASPNET_ISAPI.DLL是一个ISAPI Extention他将发向IIS的请转交ASPNET_WP.EXE处理

· ASPNET_WP.EXE使用HttpRuntime对请求进行具体处理

处理的过程可以用图表示如下:



图2:IIS上的HTTP处理管道


HttpHandler的实现


HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。实际上,我们在编写ASP.Net页面时,ASP.Net页面所继承的基类——System.Web.UI.Page——也实现了HttpHandler接口,也是一个HttpHandler,看一下它的定义就知道了(C#):

public class Page : TemplateControl, IhttpHandler


接口IHttpHandler的定义如下:

interface IHttpHandler{void ProcessRequest(HttpContext ctx);bool IsReuseable { get; }}


接口中ProcessRequest是添加自己的代码,进行相应处理的地方。IsReuseable属性指明该HttpHandler的实现类是否需要缓存。

下面的示例展示了HttpHandler的基本使用:

1、建立一个名为MyNameSpace的工程,添加一个类,名称为MyHandler,代码如下:

例1:namespace MyNameSpace{public class MyHandler : IHttpHandler{public void ProcessRequest(HttpContext ctx){HttpResponse ResponseResponse.Write("This is my handler");}public bool IsReusable { get { return true; } }}}


2、将上面的代码编译,生成MyNameSpace.Dll文件;

3、建立一个新的WebApplication项目,或打开一个WebApplication项目,将文件MyNameSpace.Dll添加到项目的引用中,或复制到项目的bin目录下;

4、修改Web.Config,添加如下内容:

<configuration>     		<system.web>			<httpHndlers><add verb="*" path="*.aspx" type=" MyNameSpace.MyHandr, MyNameSpace" />    			</httpHndlers></system.web></configuration>
 


TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多