Community Server专题五:IHttpHandlerFactory<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

如果你了解Factory设计模式,这篇文章可以不用看,只要会配置IHttpHandlerFactory就可以,不了解也没有关系,通过下面的文章你可以学会如何使用IHttpHandlerFactory,同时还会明白Factory设计模式的广义定义

在前一篇专题中讲解了HttpHandler在CS中的运用以及一些相关的话题。其实实现HttpHandler功能还有另外一个选择就是Handler Factory(CS 中没有用到Handler Factory),这是通过继承IHttpHandlerFactory接口来实现的。

IHttpHandlerFactory接口的定义如下:

interface IHttpHandlerFactory

{

IHttpHandler GetHandler(HttpContext ctx, string requestType, string url,string pathTranslated);

void ReleaseHandler(IHttpHandler handler);

}

该接口中定义了2个方法,GetHandler方法在请求开始的时候被调用,而ReleaseHandler在请求结束,所有的Handler都不再需要的时候被调用。

如何使用呢?大致有三个步骤:

1:定义实际处理HttpHandler的类(实现IHttpHandler接口),这个类会在HandlerFactory中被调用以进行业务处理,一个HandlerFactory可以调用N个HttpHandler类(不然就不叫Factory不是!)进行处理相关的业务逻辑。

2:定义HandlerFactory,例:

public class MyHandlerFactory : IHttpHandlerFactory

{

public IHttpHandler GetHandler(HttpContext ctx,string requestType,string url,string pathTranslated)

{

\\处理逻辑,最后返回一个HttpHandler类

}

public void ReleaseHandler(IHttpHandler handler) {}

}

前一步说过,一个

HandlerFactory可以处理N个HttpHandler,什么时候该处理什么HttpHandler就在这里的处理逻辑中实现,例如:以上一篇专题防盗链中说到的,你可以定义两个IHttpHandler实现,分别处理对图片与压缩文件的请求。由于GetHandler方法中传入了HttpContext的上下文,因此可以对上下文中的Url请求进行判断,然后启用不同的HttpHandler类。

3:在Web.Config文件中注册这个HandlerFactory,注册的方式与HttpHandler是一样的。例:

<httpHandlers>

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

type="MyNamespace. MyHandlerFactory, MyAssembly" />

</httpHandlers>

注意,这里不要再对

HttpHandler进行配置了,无论你定义了多少IHttpHandler实例,只要他们是通过HttpHandlerFactory调用实现其功能,在这里都不要去注册它,不然就重复了。

IHttpHandlerFactory其实非常简单,存在的思想就是Factory设计模式(Factory模式:利用给Factory对象传递不同的参数,以返回具有相同基类或实现了同一接口的对象,这里指返回具有同一IHttpHandler接口的对象)。

什么时候你要使用IHttpHandlerFactory而不去使用IHttpHandler,我就个人的开发经验做一下总结:

1:在一个项目中需要使用很多IHttpHandler的时候,而且对这些IHttpHandler判断都重复做一个同样的前期处理,如果防盗链的例子中对图片和压缩两个不同HttpHandler的处理,但是他们对URL的判断都是一致的,在.Text中使用了IHttpHandlerFactory,而不是IHttpHandler,对于URL的请求全都(*.asmx、Error.aspx除外)转交由一个IHttpHandlerFactory入口统一处理。

2:从部署和松散耦合考虑,如果你的web application足够大(我目前还没有设计过这种大型app),你就要考虑在更换HttpHandler处理类的时候该不该去改动Web.config的配置,这种改动将会重新启动整个app,对于一些系统而言这是不可以随便进行的。这个时候,统一一个入口的IHttpHandlerFactory很重要,这个入口相对不变,而IHttpHandler实现可以通过外挂自定义的xml文件来实现松散耦合,运用一些反射什么的就可以实现了。

如果对IHttpHandlerFactory有其他见解的朋友请留下你的观点。

Community Server专题五:IHttpHandlerFactory相关推荐

  1. 【图像算法】彩色图像分割专题五:提取彩色图像上特定色彩

    [图像算法]彩色图像分割专题五:提取彩色图像特定色彩 SkySeraph Jun 8th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Late ...

  2. 开发指南专题五:JEECG微云快速开发平台代码生成器

    开发指南专题五:JEECG微云快速开发平台代码生成器 1.1. Maven开发环境搭建 在搭建jeecg的maven开发环境之前,需要先配置好本机的maven环境,并在eclipse中安装好m2ecl ...

  3. Swift语法专题五——集合类型

    Swift讲解专题五--集合类型 一.引言 Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增 ...

  4. 融云发送图片消息_IM消息ID技术专题(五):开源分布式ID生成器UidGenerator的技术实现...

    1.引言 很多人一想到IM应用开发,第一印象就是"长连接"."socket"."保活"."协议"这些关键词,没错,这些确 ...

  5. uwp post php,window_Win10开发系列专题五 UWP应用添加画布及语音输入支持,这是微软Win10十个开发系列专 - phpStudy...

    Win10开发系列专题五 UWP应用添加画布及语音输入支持 这是微软Win10十个开发系列专题的第五期内容,本期微软讲解了为Windows10 UWP应用添加画布/数字墨水书写及语音输入支持的方法.微 ...

  6. 【蓝桥杯C/C++】专题五:DFS深度优先搜索

    专题五:DFS深度优先搜索 目录 专题五:DFS深度优先搜索 前言 什么是回溯法 如何理解回溯法 回溯法解决的问题 回溯法模板 1 .回溯函数模板返回值以及参数 2. 回溯函数终止条件 3 .回溯搜索 ...

  7. MRP专题五:例外消息(Exception message)

    MRP专题五:例外消息(Exception message) SAP标准的例外消息是在运行MRP过程中将产生一些特殊情况记录在MRP清单中,以及我们实时查看库存需求清单(MD04)时读取出这些信息,进 ...

  8. IM消息ID技术专题(五):开源分布式ID生成器UidGenerator的技术实现

    1.引言 很多人一想到IM应用开发,第一印象就是"长连接"."socket"."保活"."协议"这些关键词,没错,这些确 ...

  9. Team Fundation Server 2010 五

    Team Fundation Server 2010 五 Team Fundation Server 2010 五 计划 posted on 2010-04-29 15:17 冯瑞涛 阅读(...) ...

最新文章

  1. AI时代龙争虎战 什么是传统安企“护城河”?
  2. Oracle12c 在windonServer2012中安装的步骤
  3. Nginx反向代理,负载均衡,redis session共享,keepalived高可用
  4. Python List reverse()方法
  5. vba mysql连接字符串_分享一个VBA连接mysql数据库的方法
  6. 信息学奥赛一本通(2060:【例1.1】计算机输出)
  7. 人工智能(17)----人工智能视频监控 实用性有待提高
  8. c4d计算机丢失api-ms,SVsSccManager Interface
  9. [Java] 蓝桥杯ALGO-39 算法训练 数组排序去重
  10. python的解释器怎么打开_怎么启动python解释器
  11. 安装kali-linux提示vesamenu.c32 not a COM32R image
  12. 亲测有效win10系统QQ音乐无法安装
  13. Dreamweaver CSs网页设计css规则定义翻译
  14. Mysql数据处理,按照半小时汇总数据,
  15. You_Probably_Dont_Need_RAC
  16. 【opensource】开源网址推荐
  17. c++ 调用opencv+tesseract做图片文字识别
  18. V4L2_Utils目标平台编译
  19. Kindle退出中国怎么办?
  20. ADI Blackfin DSP处理器-BF533的开发详解55:CVBS输入-DSP和ADV7180的应用详解(含源码)

热门文章

  1. 针对Web应用的【攻击模式篇】
  2. Spring boot 整合 Mybatis 实现增删改查(MyEclipse版)
  3. 青春是如此美好,又怎忍平凡度过
  4. Bootstrap学习-其它内置组件
  5. PHP之提取多维数组指定列的方法
  6. Error 错误: 找不到或无法加载主类
  7. itoa函数的递归实现(二级指针实现)
  8. 用Groovy思考 第一章 用Groovy简化Java代码
  9. [BizTalk] 短消息处理流程
  10. 为什么远程桌面不能复制?解决方法