Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1039549
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2010-09-10 15:55:09

 在前面的文章中我们介绍了,我们知道HTTP 模块是一个在每次针对应用程序发出请求时调用的程序集。HTTP 模块不同于 HTTP 处理程序。对于所有的请求和响应都可调用 HTTP 模块,而 HTTP 处理程序仅在响应特定的请求时才运行。下面我们就介绍一下HTTP处理程序的概念,然后在下篇post中我们在演练一个实例 -- 

    ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序的请求而运行的过程(通常称为终结点)。最常用的处理程序是处理 .aspx 文件的 ASP.NET 页处理程序。用户请求 .aspx 文件时,页通过页处理程序来处理请求。 

    ASP.NET 页处理程序仅仅是一种类型的处理程序。ASP.NET 还包括其他几种内置的处理程序,例如用于 .asmx 文件的 Web 服务处理程序。

ASP.NET 中的内置 HTTP 处理程序

    我们可以打开 %Windows%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config 文件(framework 2.0 的配置文件),找到httpHandlers节点查看一下内置 HTTP 处理程序,所有HTTP 处理程序都是实现 IHttpHandler,

    在 httpHandlers 配置节里我们可以发现很多默认的实现 IHttpHandler, IHttpAsyncHandler 接口的处理程序,动态地创建以处理针对 ASP.NET 文件的请求。当然我们也可以发现很多工厂类,如 PageHandlerFactory 类,工厂类的作用是提供具体的HTTP 处理程序。 

比如: <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/> 

    上面的 add配置节作用是对于 aspx 所有(path="*.aspx")页的所有(verb="*" GET/POST/TRACE/DEBUG..)请求都交给PageHandlerFactory 类返回的HTTP处理程序的实例,PageHandlerFactory 类是一个工厂类它实现 以提供 ASP.NET 文件的默认 HTTP 处理程序。当然如果需要你完全可以创建你自己的实现 IHttpHandlerFactory 接口的类,具体实现

如果您需要进行特殊处理(可以在应用程序中使用文件扩展名进行标识),可以创建自定义 HTTP 处理程序。例如,下面的方案就很好地利用了自定义 HTTP 处理程序:

 u        RSS 若要为站点创建 RSS 源,可以创建一个可发出 RSS 格式 XML 的处理程序。然后将您应用程序中的 .rss 扩展名(举例)绑定到此自定义处理程序。当用户向站点发送以 .rss 结尾的请求时,ASP.NET 将调用您的处理程序来处理请求。

u        图像服务器 如果希望 Web 应用程序能够提供不同大小的图像,可以编写一个自定义处理程序来调整图像大小,然后将调整后的图像作为处理程序的响应返回给用户。

创建自定义 HTTP 处理程序 

若要创建一个自定义 HTTP 处理程序,需要以下三个步骤:

 1.  一个 HTTP 处理程序类的代码。可以创建一个可实现 IHttpHandler 接口的类以创建同步处理程序,或者创建一个可实现 IHttpAsyncHandler 的类以创建异步处理程序。两种处理程序接口都要求您实现 IsReusable 属性和 ProcessRequest 方法。 

  • IsReusable 属性指定 IHttpHandlerFactory 对象(实际调用适当处理程序的对象)是否可以将您的处理程序放置在池中,并且重新使用它们以提高性能,或是否在每次需要处理程序时都必须创建新实例。
  • ProcessRequest 方法负责实际处理单个 HTTP 请求。 

2.  Web.config 文件中注册该处理程序并将自定义的文件扩展名映射到该处理程序所需的元素。

3.  Internet 信息服务 (IIS) 中将自定义文件扩展名映射到 ASP.NET

 

异步 HTTP 处理程序

    利用异步 HTTP 处理程序可以启动一个外部进程(例如对远程服务器的方法调用),然后继续处理程序的处理工作,而无需等待外部进程结束。在异步 HTTP 处理程序的处理期间,ASP.NET 将通常用于外部进程的线程放回线程池中,直到处理程序收到来自外部进程的回调。这样可以避免阻止线程,并大幅改善了性能,因为一次所能执行的线程数量是有限的。如果许多用户都在请求依赖于外部进程的同步 HTTP 处理程序,那么操作系统可能很快就会用完所有线程,因为大量线程被阻止,正在等待外部进程。 

     创建异步处理程序时,除了实现 ,还必须实现 BeginProcessRequest 以启动异步调用来处理单个 HTTP 请求。还必须实现 EndProcessRequest 方法,以便在进程结束时运行清理代码。

阅读(708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~