【问题标题】:HTTP handlers in IIS6 or IIS7 classic modeIIS6 或 IIS7 经典模式下的 HTTP 处理程序
【发布时间】:2011-10-01 15:50:10
【问题描述】:

我目前在 IIS 中处理 httphandlers。 我正在 VS2010 和 Cassini 中使用 .NET4 开发网站。在这个网站上,我有一个画廊,它的图片是通过我的处理程序加载的。 例如http://mywebsite.com/Gallery/123/Pic1.jpg 我的 HTTP Handler 获取 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 中不起作用....

谁能帮帮我?

【问题讨论】:

  • 你找到解决办法了吗?

标签: iis-6 httphandler


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多