13

在阅读了一些关于集成管道的文档后,我对 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" 究竟是如何工作的吗?

4

1 回答 1

8

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

ManagedHandler 前提条件

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

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

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

在 IIS 中打开此部分

然后你会看到所有注册的映射

于 2013-09-30T14:17:52.557 回答