我在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;添加)。
我错过了别的什么吗?
谢谢, 安迪
答案 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>
部分。