zoukankan      html  css  js  c++  java
  • 一般处理程序aspx

    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    属性,将该属性的值改为true,为什么不起作用?按照MSDN的解释,该属性的意思是:

    “获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例,如果 IHttpHandler 实例可再次使用,则为 true;否则为
    false。”
    看到这个解释可能部分学生就会想把该属性的值设置为true,就可以重复利用 IHttpHandler 实例,达到提升性能的目的。
    但是即使将该属性的值设置为true.也是没有什么作用。今天把这个属性说一下,
    我们知道,*.ashx 是交给SimpleHandlerFactory处理的,在该类中,调用GetHandler()方法直接返回相应的实例,也就是在
    SimpleHandlerFactory中没有用到IsReusable属性。
    首先先从MapHandlerExecutionStep类中的 context.Handler = this._application.MapHttpHandler(context,
    request.RequestType, request.FilePathObject, request.PhysicalPathInternal, false)开始看一下,MapHttpHandler方法,
    的作用就是创建一个HttpHandler对象,展开该方法有如下代码需要注意, HttpHandlerAction mapping =
    this.GetHandlerMapping(context, requestType, path, useAppConfig),该方法的作用就是从<httpHandlers>节中根据请求
    的方式(requestType)和路径(path)获取相应的配置项,最后的返回类型是HttpHandlerAction
    。如果展开GetHandlerMapping方法,那么大体上的工作是,先从缓存中去查找,如果找不到再去从配置文件中查找相应的映射。
    在MapHttpHandler方法中还有一个地方就是 IHttpHandlerFactory factory = this.GetFactory(mapping);该接口创建的是
    HttpHandler。
    我们知道ashx能直接处理HTTP请求,它们都实现了IHttpHandler接口,因为已经完成了相应的配置,默认的配置信息如下:

    <httpHandlers>
    <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="true"/>
    </httpHandlers>

    并且SimpleHandlerFactory也实现了IHttpHandlerFactory接口,所以可以根据请求的路径创建一个IHttpHandler实例。

    HttpApplication在处理请求时,并不会直接创建一个IHttpHandler的实例,而是先获取一个IHttpHandlerFactory的对象,

    再调用GetHandler()方法来获取一个IHttpHandler实例。

  • 相关阅读:
    Linux下校验下载文件的完整性(MD5,SHA1,PGP)
    十六进制字节 & 十六进制转二进制
    session & cookie
    php与mysql的链接到底用mysql 还是mysqli,pdo
    php连接数据库时候的字符集设置
    Prepared statements(mysqli & pdo)
    shell脚本中执行mysql命令
    centos系统字符编码问题
    实用crontab命令
    shell获取用户输入
  • 原文地址:https://www.cnblogs.com/liuweiqiang11188/p/6684092.html
Copyright © 2011-2022 走看看