4

我在以集成模式运行的应用程序池中有一个应用程序。我已经向 system.web > httpHandlers 添加了一个处理程序,并且一直得到 404 结果。所以我启用了失败的请求跟踪,在请求详细信息中我看到了多个这样的整体:

HANDLER_PRECONDITION_NOT_MATCH 名称:PageHandlerFactory-ISAPI-2.0 前置条件 classicMode,runtimeVersionv2.0,bitness32

前提条件似乎总是经典模式。当应用程序池在集成模式下运行时,为什么 IIS 7 会尝试将请求与这些处理程序匹配?

谢谢!

4

2 回答 2

0

您的 HttpHandler 实际上应该在文件的<system.webServer/>部分中进行配置web.config

于 2009-10-21T05:24:22.763 回答
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 的应用程序池中。

于 2010-09-28T13:19:32.820 回答