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

发布于 2024-12-07 17:02:05 字数 1047 浏览 0 评论 0原文

我目前正在与 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 中不起作用...

可以有人帮我吗?

I'm currently struggling with httphandlers in IIS.
I'm developing a website in .NET4 in VS2010 and Cassini. In this website, i have a gallery, whose pictures are loaded through my handler.
For example http://mywebsite.com/Gallery/123/Pic1.jpg
My HTTP Handler gets the id 123 and returns the picture from the database (simplified).

So, everything works fine in Cassini (VS integrated webserver) and in IIS7 in "integrated mode". Pictures are loaded like they should.

But I have to deploy this site on a shared hoster, who is using IIS6.

After many searching and own logging, I found out, the the request isn't routed to my handler, and so I get a 404 from IIS.

My definition which is enough for IIS7 integrated mode:

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

For IIS7 in classic mode I had to add

<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>

This last config only works whith the stuff in the module and scriptprocessor attributes...

But this config doesn't work in IIS6....

Can anyone help me ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒与心事 2024-12-14 17:02:05

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

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

The issue is that IIS6 typically decides what ISAPI handler to pass the request to by using the file extension. So it sees .jpg and tries to serve a static file from that path. This is also what IIS7 refers to as classic mode. And you'll note you are referencing aspnet_isapi.dll in your configuration because it needs to be told what should handle this. Once you've passed it into aspnet_isapi, the asp.net http handling pipeline kicks in and you can execute your handler.

The easiest fix would be to find a host that supports IIS7. Failing that, you could see if they have any url rewriting options. With that, you could rewrite things so that you append an .ashx on the url, which will let IIS6 grab it and put it into the asp.net pipeline and your handler would fire. You could also see if they allow wildcard mappings, but that is a very tall order for most shared hosts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文