对于自定义 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