我在一个以集成模式运行的应用程序池中有一个应用程序。我已经为system.web>添加了一个处理程序。 httpHandlers和我一直得到404结果。所以我启用了失败的请求跟踪,在请求详细信息中,我看到多个这样的entires:
HANDLER_PRECONDITION_NOT_MATCH 名称:PageHandlerFactory-ISAPI-2.0 前提条件classicMode,runtimeVersionv2.0,bitness32
前提条件似乎总是经典模式。当应用程序池在集成模式下运行时,为什么IIS 7会尝试将请求与这些处理程序匹配?
谢谢!
答案 0 :(得分:0)
您的HttpHandler实际上应该在<system.webServer/>
文件的web.config
部分进行配置。
答案 1 :(得分:0)
我没有找到默认情况下在classicMode中设置的原因,但是这篇博客很好地解释了各种先决条件:http://blogs.iis.net/thomad/archive/2006/11/04/precondition-what.aspx
以下是博客中关于“模式前提条件”的摘录:
模式前置条件
新的托管模块和托管处理程序可扩展性允许您将托管代码(即ASP.NET页面,模块和处理程序)直接添加到IIS7管道中。 IIS7需要以特定方式运行工作进程才能使其工作。它需要加载.NET Framework 2.0,还需要运行一个名为webengine.dll的模块。 Webengine.dll完成了使用IIS7管道连接托管模块的所有工作,因为IIS7本身不知道托管代码。集成ASP.NET页面,模块和处理程序的新方法称为“集成模式”。
但是,在IIS7中连接托管代码仍然是一种很好的旧方法,即通过ISAPI接口。 ASPNET_ISAPI.DLL用于在IIS 5,5.1和6.0中执行此操作。如果以“经典模式”运行工作进程,IIS7将继续支持ISAPI连接。
因此,IIS7引入了两个前提条件,称为“integratedMode”和“classicMode”。具有与之关联的“integratedMode”前提条件的处理程序将仅加载到ApplicationPool上设置了“integratedMode”属性的应用程序池中。具有“classicMode”前提条件的处理程序将仅加载到将integratedMode属性设置为false的应用程序池中。