IIS 6 ASP.NET处理程序404错误

时间:2012-02-03 14:53:39

标签: asp.net iis-6 httphandler

我在Windows Server 2003(x86)上运行了IIS6并编写了自定义处理程序(不是404错误的处理程序)。

当我尝试通过在浏览器http://localhost/Priority1.Sync/Transfer.p1s中打开来访问处理程序时,我收到错误404(日志文件中为404 0)。 Web应用程序中的其他页面工作,例如http://localhost/priority1.sync/syncservice.asmx

处理程序在我的IIS7开发机器上运行正常。

web.config的设置如下:

<httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*.p1s" type="MCS.Priority1.Sync.WebServices.TransferHandler, SyncService" />
</httpHandlers>

我为“* .p1s”设置了应用程序扩展名(默认网站&gt;属性&gt;主目录&gt;配置&gt;映射&gt;添加)。

我错过了别的什么吗?

谢谢, 安迪

3 个答案:

答案 0 :(得分:5)

您是否在自定义处理程序IIS配置中选中了“验证文件是否存在”选项?

IIS6期望默认情况下存在物理文件。如果没有,则根本不会将请求传递给您的处理程序。您需要禁用此检查,因此它会按预期将请求发送给您的处理程序。

答案 1 :(得分:1)

IIS6和IIS7是根本不同的野兽。 IIS7的托管管道意味着每个请求都会命中您的注册处理程序,在IIS6中,只有映射到ASPNET_ISAPI.DLL(通常是* .aspx和* .ashx以及其他默认ASP.NET扩展)的内容才会得到处理。

您可以通过为此项目使用开发应用程序池的“经典”管道,使IIS7开发框以这种方式运行。

让它按预期工作的另一个技巧是将404错误映射到ASP.NET页面,然后你至少可以进入你的处理程序。

老实说,我希望将生产升级到IIS7,因为它的功能非常强大,甚至都不好笑。

答案 2 :(得分:1)

如果您要为IIS 6注册处理程序,那么请记住它们应该放在 web.config的<httpHandlers>部分的<system.web>元素不是IIS7使用的<system.webServer>部分。