IIS6或IIS7经典模式下的HTTP处理程序

时间:2011-10-01 15:50:11

标签: iis-6 httphandler

我目前正在与IIS中的httphandlers斗争。 我正在VS2010和Cassini中开发一个.NET4网站。在这个网站上,我有一个画廊,其图片通过我的处理程序加载。 例如http://mywebsite.com/Gallery/123/Pic1.jpg 我的HTTP处理程序获取id 123并从数据库返回图片(简化)。

因此,Cassini(VS集成网络服务器)和IIS7中的“集成模式”一切正常。照片按照应有的方式加载。

但我必须在使用IIS6的共享主机上部署此站点。

经过多次搜索和自己的日志记录后,我发现,请求没有路由到我的处理程序,所以我从IIS获得了404.

我的定义足以满足IIS7集成模式:

<system.web>
   <handlers>
       <add verb="*" path="Gallery/*/*" type="[coorect Type spec]" />
   </handlers>
</system.web>

对于经典模式的IIS7,我必须添加

<system.webServer>
    <handlers>
        <add name="ImageHandler" verb="*" path="Galler</*/*" type="[type]" modules="IsapiModule" scriptProcessor="c:\windows\Microsoft.net\framework\v4.0.30319\aspnet_isapi.dll"/>
    </handlers
</system.webServer>

这最后一个配置只适用于模块和脚本处理器属性中的东西...

但是这个配置在IIS6中不起作用....

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

问题是IIS6通常使用文件扩展名决定将请求传递给哪个ISAPI处理程序。所以它看到.jpg并尝试从该路径提供静态文件。这也是IIS7所称的经典模式。并且您会注意到您在配置中引用了aspnet_isapi.dll,因为需要告知它应该处理什么。一旦你将它传递给aspnet_isapi,asp.net http处理管道即可启动,你可以执行你的处理程序。

最简单的解决方法是找到支持IIS7的主机。如果失败了,你可以看看他们是否有任何网址重写选项。有了这个,你可以重写一些东西,这样你就可以在网址上附加一个.ashx,这会让IIS6抓住它并把它放到asp.net管道中,你的处理程序就会触发。您还可以看到它们是否允许使用通配符映射,但对于大多数共享主机而言,这是一个非常高的订单。