zoukankan      html  css  js  c++  java
  • system.web下的HttpModules节点和system.webServer下的modules节点的配置区别

    自定义web模块,需继承System.Web.IHttpModule接口

    一:拦截对该服务器所有的http请求。

    第一步:将自定义module类使用强名编译,并放在GAC中。

    Windows7不能直接把dll文件拖到GAC中,只能只用GACUtil工具。

    方法是:打开Visual Studio命令行,提示进入目录:E:Program FilesMicrosoft Visual Studio 10.0VC,
    gacutil /i [assemblypath],将该Assembly安装在GAC中
    gacutil /l [assemblyName], 出现Assembly的详细信息

    gacutil /u [assemblyName], 卸载该Assembly



    第二步:把模块加在machine.config, web.config或者IIS的applicationhost.config里。
    IIS的applicationhost.config位于(%windir%system32inetsrvconfigapplicationhost.config)

    <location path="" overrideMode="Allow">
    <system.webServer>
    <modules>
        
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass,RequestModuleAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=5510eb446e44a3fd"/>
             ......................

    其中,type的格式为:“NameSpaceName.ClassName,AssemblyName, StrongName”



    二:只拦截对某web程序的Request,有两种方法:

    1.将自定义模块单独编译为一个dll文件,并通过dll引用添加到web程序。

    并修改该程序内部的web.config文件:

    <configuration>    
    <system.webServer> <!-- IIS7.0集成模式下 -->
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass,RequestModuleAssembly"/>
    </modules>
    </system.webServer>
    <system.web> <!-- IIS7.0经典模式或者IIS之前版本 -->
    <compilation debug="true" targetFramework="4.0"/>
    <httpModules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass,RequestModuleAssembly"/>
    </httpModules>
    </system.web>
    </configuration>



    2.把自定义模块的类文件放在web网站的app_code目录下,并修改该程序内部的web.config文件:

    <configuration>
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass"/>
    </modules>
    </system.webServer>
    <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpModules>
    <add name="HttpRequestModule" type="RequestModuleNS.RequestModuleClass"/>
    </httpModules>
    </system.web>
    </configuration>

    其中,type格式为“NameSpaceName.ClassName“。

    奇怪的是,在第二种方式下,在VS debug模式下访问.wmv文件时不能触发module,访问.aspx文件时则可以。而第一种方式下,访问程序里的.wmv文件和.aspx文件都可以触发该自定义module。笔者不知为何,索性改回第一种方式。留待以后再探索。(探索结果:原来不是第二种方式的问题,而是在测试时网站端口改变,而旧的debug线程未被杀死,所有用旧的url直接访问了过期的旧线程。这是不是VS的一个bug,当退出debug时,启动的临时线程并未被杀死,而重新启动debug时,旧的临时server线程也未被新的替代,好大一个bug哇。看图:

    ,只有两个,壮观的时候有6,7个呢。

    )

     
     
     
  • 相关阅读:
    Scala学习笔记--集合类型Queue,Set
    Hadoop学习笔记-HDFS命令
    Spark添加/更改集群节点需要修改的配置文件
    Spark学习笔记-如何运行wordcount(使用jar包)
    Scala学习文档-列表的使用
    Python yaml 使用的包
    Python 通过命令行安装包的时候 pip 提示错误
    Python 注释
    Python 关键字
    Python 数据类型
  • 原文地址:https://www.cnblogs.com/xdot/p/7714610.html
Copyright © 2011-2022 走看看