现在的位置: 首页 > 综合 > 正文

IIS 自定义 IHttpHandler 配置异常

2013年05月26日 ⁄ 综合 ⁄ 共 1274字 ⁄ 字号 评论关闭

对于自定义 Handler   处理 自定义  后缀的 页面——也许你在 VS中开发都是非常正常的。

但是当你发布到 IIS 上时,却报异常了:

  • 或者 500.21
  • 或者 GetProcAddress() 异常。
  • 其模块列表中有一个错误模块“ManagedPipelineHandler”

 

于是,你按照网上的方法:

  • 或者 aspnet_regiis.exe -i
  • 或者 重装了IIS
  • 或者 在IIS 中,将你的Handler 的程序集 加入了 ISAP筛选器

 

 

结果,折腾了半天,情况没有任何一点好转——于是你彻底想死了!!

 

不废话了,解决办法:

  • 在IIS中,新建网站
  • 选中 新建的应用程序池,设置为:
    •   .Net 4.0(警告:如果你的是2.0-3.5 的网站,你必须选择 .Net 2.0——选择高版本的 4.0 会报错)
    •   经典模式
  • 选中 新建的网站,“处理程序映射”:
    •   新建   *.mypage   
    •   可执行程序  C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll    
      •     (警告:具体2.0  4.0  版本自己选择(.Net2.0 网站只能选 .Net2.0))
      •     (警告:请不要选择 你自己的程序集,否则会出现  GetProcAddress() 异常)
    •       请求限制    默认就行(不勾选,全部谓词,脚本)
  • 此时配置文件中会自动添加:

<system.webServer>
  <handlers accessPolicy="Read, Script">
    <add name="MyHandler" path="*.mypage" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
  </handlers>
</system.webServer>

  • 配置文件中,你还需要配置——可能你已经配置好了:

<system.web>
  <compilation debug="true" />
  <httpHandlers>
    <add path="*.mypage" verb="*" type="TestWebHandler.MyHandler" />
  </httpHandlers>
</system.web>

 

于是,你的自定义 Hanlder  也就可以正常在 IIS 中执行了;

很多人的错误就在于   配置自己的 后缀 *.mypage 时,指定了自己的程序集——你必须使用   aspnet_isapi.dll

 

                                                  舒小龙

                                              2013-01-15 20:35

 

 

抱歉!评论已关闭.