首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.2.1  IHttpHandler接口

是否想学习HTTP处理程序编程呢?好吧,第一步工作是熟悉IHttpHandler接口。HTTP处理程序只不过是实现该接口的托管类。更确切地讲,同步HTTP处理程序实现IHttpHandler接口;而异步HTTP处理程序实现IHttpAsyncHandler接口。让我们先看看同步处理程序。

IHttpHandler接口的合同定义了HTTP处理程序以同步方式处理一个HTTP请求需要采取的行动。

1. IHttpHandler接口的成员

IHttpHandler接口只定义了两个成员:ProcessRequest和IsReusable,如表2.1所示。ProcessRequest是一个方法,而IsReusable是一个布尔逻辑属性。

表2.1  IHttpHandler接口的成员

成  员

描    述

IsReusable

该属性获得一个布尔值,指示另一个请求是否可以使用该HTTP处理程序的实例

ProcessRequest

该方法处理HTTP请求

Page类上的IsReusable属性返回false,表示需要该HTTP请求的新实例来服务一个页面请求。通常我们使它在所有情况下都返回false,并根据请求负荷的不同而要求它做一些有意义的处理。那些被用作筛选特殊请求的简单屏障的处理程序可以将IsReusable设置为true,以节省一些CPU周期。稍后我将用一个具体的实例来说明这一点。

ProcessRequest方法具有如下签名:

void ProcessRequest(HttpContext context);

它以请求的上下文作为输入,并确保该请求得到服务。在同步处理程序的情况下,当ProcessRequest返回时,准备把输出发到客户端。

2. 一个简单的HTTP处理程序

再次强调,HTTP处理程序只是一个实现了IHttpHandler接口的类。请求的输出是在ProcessRequest方法中建立的,如下面的代码所示:

using System.Web;

namespace ProAspNet20.Advanced.CS.Components

{

public class SimpleHandler : IHttpHandler

{

// Override the ProcessRequest method

public void ProcessRequest(HttpContext context)

{

context.Response.Write("<H1>Hello, I'm an HTTP handler</H1>");

}

// Override the IsReusable property

public bool IsReusable

{

get { return true; }

}

}

}

我们需要一个能够调用该处理程序的入口点。在此上下文中,该处理程序代码的入口点只不过是一个HTTP终点——即,一个公共的URL。该URL必须有一个惟一的名称,使IIS和ASP.NET运行库能够把它映射到该代码。注册时,HTTP处理程序和Web服务器资源之间的映射是通过web.config文件建立的。

<configuration>

<system.web>

<httpHandlers>

<add verb="*" path="myHandler.aspx"

type="ProAspNet20.Advanced.CS.Components.SimpleHandler" />

</httpHandlers>

</system.web>

</configuration>

<httpHandlers>节列出了当前应用程序可用的处理程序。这些设置指示,对myHandler.aspx终点的任何输入请求,由SimpleHandler处理程序负责处理。要注意的是,myHandler.aspx URL不必是服务器上的物理资源;它只是一个公共资源标识符。type属性引用包含该处理程序的类和程序集,它的标准格式是type[,assemly]。如果该组件在App_Code或其他保留文件夹中定义,则忽略该程序集信息。

 注意    如果在machine.config文件中输入上述设置,则将把SimpleHandler组件注册成可以从服务器机器上托管的所有Web应用程序内可调用的组件。

如果调用myHandler.aspx URL,将得到如图2.2所示的结果。

图2.2  一个响应myHandler.aspx请求的HTTP处理程序示例

这里所述的方法是使用HTTP处理程序最快、最简单的方法,但是有关HTTP处理程序注册的知识,我们还有很多要了解并且还有很多其他选项可以利用。现在,让我们考虑一个更复杂的HTTP处理程序示例。