2012-02-03 142 views
0

我有一个运行在Windows Server 2003(x86)上的IIS6,并且写了一个自定义处理程序(不是404错误的处理程序)。IIS 6 ASP.NET处理程序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”(默认Web站点>属性>主目录>配置>映射>添加)的应用程序扩展。

我是否缺少别的东西?

感谢, 安迪

回答

5

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

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

+1

明白了1,谢谢。 特别是,当我去[默认网站>属性>主目录>配置>映射>添加],我应该没有选中“验证文件存在”复选框。 – 2012-02-03 15:54:59

1

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

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

使其工作如何工作的另一个技巧是将404错误映射到ASP.NET页面,然后您至少可以进入您的处理程序。

诚实地说,我会考虑将生产升级到IIS7,因为它的功能非常强大,它甚至不会有趣。

1

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