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



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

所以,在Cassini (VS集成web服务器)和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:windowsMicrosoft.netframeworkv4.0.30319aspnet_isapi.dll"/>
    </handlers
</system.webServer>

最后一个配置只适用于模块和scriptprocessor属性中的东西…

但是这个配置不能在IIS6中工作....

有人能帮我吗?

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

最简单的修复方法是找到一个支持IIS7的主机。如果做不到这一点,你可以看看他们是否有任何url重写选项。这样,您就可以重写内容,以便在url上附加.ashx,这将让IIS6抓取它并将其放入asp.net管道中,然后处理程序将触发。您还可以查看它们是否允许通配符映射,但对于大多数共享主机来说,这是一个非常苛刻的要求。

最新更新