一、关于IHttpHandler.IsReusable

  很多人不明白,这哥们到底干嘛的,估计是微软最初的一个想法--让一个对象可以一直不断地被重复使用

,但这个想法不成熟,会带来很多隐藏问题,一个对象作为始终存在的对象,只要被污染了,它就不能正常使用了.

所以,我们会看见微软自己也一直让这个属性值为false;

二、关于ashx的Handler执行方式

  扩展名为ashx的请求是通过SimpleHandlerFactory处理程序工厂完成的,当请求一个ashx扩展名的服务器上资源时,SimpleHandlerFactory将找到对应的ashx文件,通过这个文件找到对应的处理程序。最后,SimpleHandlerFactory通过反射创建一个此类型处理程序对象实例

using System;
using System.Runtime;
using System.Web.Compilation;
namespace System.Web.UI
{
internal class SimpleHandlerFactory : IHttpHandlerFactory2, IHttpHandlerFactory
{
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
internal SimpleHandlerFactory()
{
}
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string path)
{
return ((IHttpHandlerFactory2)this).GetHandler(context, requestType, VirtualPath.CreateNonRelative(virtualPath), path);
}
IHttpHandler IHttpHandlerFactory2.GetHandler(HttpContext context, string requestType, VirtualPath virtualPath, string physicalPath)
{
BuildResultCompiledType buildResultCompiledType = (BuildResultCompiledType)BuildManager.GetVPathBuildResult(context, virtualPath);
Util.CheckAssignableType(typeof(IHttpHandler), buildResultCompiledType.ResultType);
return (IHttpHandler)buildResultCompiledType.CreateInstance();
}
public virtual void ReleaseHandler(IHttpHandler handler)
{
}
}
}

三、HttpHandlerFactory到底是何物?

  从上面的ashx可以得知,ASP.NET实际不会将指定格式的HTTP请求直接定位到具体的IHttpHandler容器之上,而定位到了其内部默认的IHttpHandlerFactory上。

IHttpHandlerFactory的作用是对IHttpHandler容器进行调度和管理。

  如果我们自定义的HttpHandler比较多,会在Web.config中注册很多HttpHandler类,这时把这些HttpHandler通过一个HttpHandlerFactory来集中管理就显的非常必要,

此时只需要在Web.config中注册此HttphandlerFactory即可。

  IHttpHandlerFactory接口包含两个方法。GetHandler返回实现IHttpHandler接口的类的实例,ReleaseHandler使工厂可以重用现有的处理程序实例。

实现一个自定义的HttphandlerFactory同样需要两步:

  第一:定义一个实现了IHttpHandlerFactory接口的类,并实现其GetHandler方法。在GetHandler中,我们可以根据具体业务选择不同的工厂模式实现方式,下面的代码中包括了通过判断后缀实现的简单工厂模式和通过反射实现的工厂模式两种实现方式。

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.IO; namespace MyHttpHandler
{
public class MyHttpHandlerFactory:IHttpHandlerFactory
{
public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
#region 通过判断后缀实现简单工厂模式
//获取文件服务器物理路径
string path = context.Request.PhysicalPath;
//获取文件名后缀名
string exstention = Path.GetExtension(path).ToLower(); if (exstention == ".html")
{
return new HtmlHttpHandler();
}
else if (exstention == ".xml")
{
return new XMLHttpHandler();
}
else
{
return null;
}
#endregion #region 通过反射实现工厂模式
string handlerName = url.Substring(url.LastIndexOf("/") + );
string className = handlerName.Substring(, handlerName.IndexOf("."));
string fullClassName = "MyHttpHandler." + className; object h = null; // 采用动态反射机制创建相应的IHttpHandler实现类。
h = Activator.CreateInstance(Type.GetType(fullClassName)); return (IHttpHandler)h; #endregion } public void ReleaseHandler(IHttpHandler handler)
{ }
}
}

四、求关注、求推荐

兄台给点鼓励吧 O(∩_∩)O~,你的鼓励是我继续写好这一系列的理由

五、下一篇

你必须知道的ASP.NET-----IHttpAsyncHandler实质

关于HttpHandler的相关知识总结的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  3. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  4. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  5. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  6. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  7. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  8. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  9. 地址标记,SpringMVC转发与调用相关知识存档

    1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...

随机推荐

  1. 浅论Android网络请求库——android-async-http

    在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Insta ...

  2. Jexus 5.8.2 Beta1发布:为Asp.Net Core进入生产环境提供平台支持

    Jeuxs 5.8.2beta1于7月10日正式发布. 有如下更新: 1,为FastCGI提供KEEP_CONN支持,优化FastCGI工作线程池调度算法: 2,完善反向代理的负载均衡策略,支持“随机 ...

  3. XXX项目总结

    前言 昨天晚上睡不着总感觉有些什么东西需要记下来,所以就有了这篇文章.做了好几次的重构是应该有一个总结以备以后查阅,当然有些设计思想是通过自己的总结也有些是吸收别人的思想,同样如果能对你有所帮助那就再 ...

  4. 作业三(代码规范、代码复审、PSP)

    1.代码规范: 我支持代码要有规范,理由如下. (1).艺术是一个很带有个人风格的学科,天马行空才能凸显出自己的价值.但不要忘了,会艺术的不是生下来就会艺术, 他也需要按照前辈的步骤一步一步的学习基础 ...

  5. WPF 编辑状态切换

    有时候DataGrid编辑的时候一个属性需要根据别的属性呈现不同的编辑状态.这就需要一个做一个状态切换.比如地址是1的时候,读写类型是读写.只读.只写.地址是2的时候,就只读.状态栏切换为TextBo ...

  6. 据说每个大牛、小牛都应该有自己的库——Ajax

    蹉跎到今天终于要写Ajax部分了,平时工作中除了选择器我用jQuery的最多的就是ajax,所以这部分在自己的框架中必不可少. XMLHttpRequest 我以为对每个使用过Ajax的人来说XMLH ...

  7. Macaca-iOS入门那些事

    Macaca-iOS入门那些事 一. 前言 最近有朋友向我请教iOS自动化测试框架选型,刚好前段时间做讲座时发现了macaca,遂试用.所以,下面的内容会只围绕Macaca的iOS部分. 二. Mac ...

  8. MySQL账户安全设置

    一般来说,安装完MySQL后,默认的用户是root,密码123456,外网不能访问. 有时候也希望在外网访问,则可以添加一个账户.建议不要用root. 如下表,存在安全问题: mysql> se ...

  9. Android开发学习之路-GSON使用心得(OCR图片识别)

    在安卓中解析JSON串可以使用的方法有很多,比如说用官方提供的JSONObject或者谷歌提供的开源库GSON,以及一些第三方开源库. 这里用的是GSON,为了测试方便,借助了一个百度的api,一个图 ...

  10. python 多线程网络编程 ( 二 )

    背景 我在[第一篇文章中]已经介绍了如何实现一个多线程的todo应用,接下来我将会研究如何使这个服务器完成下面这几个功能. 1.使用正则表达式解析用户发送的请求数据: 2.使用ThreadLocal技 ...