Ajax改良形式——XMLHTTP + HttpHandler

  该模式改善XMLHTTP + WebForm存在的问题,其使用HttpHandler处理请求(Request)的消息和发送响应(Response)。

  HttpHandler是Http的处理核心之一,它实现了ISAPI Extention的功能。HttpHandler的功能是通过实现IHttpHandler接口来实现的。一个简单的Http请求处理过程如下图:

  

  Web请求首先到达IIS,通过aspnet_isapi.dll把请求传递给ASP.NET引擎;在ASP.NET引擎中对Web请求经过多个HTTP Module的处理,最后到达HTTP Handler;HTTP Handler再把处理后的结果返回给IIS,IIS负责进一步把这个结果返回给发出请求的客户端。

  由上面处理过程可以看出,在ASP.NET管理处理的末端是HTTP Handler。其实每个ASP.NET的Page都实现了IHttpHandler,在Visual Studio.net中的page类对象查看器中可以证实这一点,具体的Page类代码如下:

  

   
  接口IHttpHandler包括一个方法和一个属性。ProcessRequest方法是添加自己的代码进行相应处理的地方;IsReuseable属性指明该HttpHandler的实现类是否需要缓存。具体定义代码如下所示:
  //IHttpHandler接口
  interface IHttpHandler
  {
    void ProcessRequest(HttpContext ctx);
    bool IsReuseable{get;}
  }
  Handler的实现
  新建一个类库工程,命名HelloAjax,然后添加一个实现IHttpHandler接口类HttpHandler:
using System;
using System.Web;
using System.Text;
namespace HelloAjax
{
  public class HttpHandler:IHttpHandler
    {
        #region IHttpHandler 成员
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            string str = "服务器Hander得到了您输入的信息:" + context.Request["msg"] + "<br/>您的IP地址是:";
            str += context.Request.UserHostAddress;
            str += "<br/>当前服务器的时间:";
            str += DateTime.Now.ToLocalTime();
            context.Response.Write(str);
        }
        #endregion
    }
}
编译后得到的HelloAjax.dll就是要用到的Handler。
改良工作
首先,项目中添加对Handler的引用
然后,Web.config的system.HttpHandler中配置如下节
    <httpHandlers>
         <add verb="GET,POST"
              path="*.ashx"
              type="HelloAjax.HttpHandler,HelloAjax"/>
         </httpHandlers>
最后,客户端请求的URL需改为以.ashx为扩展名
posted @ 2011-07-08 18:48  sunnyboy  阅读(353)  评论(0编辑  收藏  举报