preCondition =“managedHandler”如何为模块工作?

在阅读了有关集成管道的一些文档之后,我很困惑IIS如何确定何时运行托管模块,托管请求实际是什么,以及如何确定,例如:

http://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/aspnet-integration-with-iis http://blogs.msdn.com/b/tmarq/archive/2007 /08/30/iis-7-0-asp-net-pipelines-modules-handlers-and-preconditions.aspx

多次提到“管理”请求。 在一个实例中,解释了托管请求是具有到托管处理程序的映射的请求。 还有一句话说处理程序是一个“特殊”模块(第二个链接)。

模块被描述为针对每个请求运行的东西,并且处理程序具有指定何时应该运行的映射(例如,针对* .aspx的HTTP GET)(第二和第一链接)。 此外,对于模块,execute_request_handler [我假设作为处理程序实际运行的点]来自管道的几个阶段(在begin_request,authenticate,authorize等之后……),它意味着有一个步骤在所有这一切发生之前,确定请求是针对托管处理程序,以便在请求不是托管处理程序时禁用具有preCondition =“managedHanlder”的模块的执行。

我觉得这里有一些我不知道的东西,有人可以解释一下preCondition =“managedHandler”是如何工作的吗?

从这篇博客文章( http://blogs.iis.net/thomad/archive/2006/11/04/precondition-what.aspx ):

ManagedHandler的前提条件

IIS 7.0引入了一种新的托管扩展性模型。 处理程序和模块现在可以用托管代码编写,并直接集成到IIS请求管道中。 但在托管代码和本机代码之间切换是一项昂贵的操作。 引入了managedHandler前置条件,以允许优化不需要托管代码的请求的性能,例如,当提供静态文件(.html,.jpg等)时。 如果请求由本机处理程序提供,并且每个受管模块都配置了managedHandler前提条件,则不会调用托管代码。 实际情况是表单身份validation。 托管Forms身份validation模块具有managedHandler前提条件,因此仅在请求ASP.NET内容(例如* .aspx)页面时调用。 如果请求.html页面,则不会调用表单身份validation。 如果要使用表单身份validation保护所有内容,只需从Forms身份validation模块条目中删除managedHandler前提条件即可。

简而言之,如果请求可以由本机IIS模块(例如,图像)提供,则不必遍历所有托管管道(例如,所有“global.asax”事件甚至更多) ,带来巨大的性能提升。

编辑:您的问题的实际答案是:处理程序映射。 这是将文件扩展名与特定处理程序相关联的内容。 您将在下面找到如何在II7中编辑这些映射。 您还可以在此处找到有关处理程序映射的更多信

在IIS中打开此部分

然后,您将看到所有已注册的映射