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

时间:2013-09-24 18:38:13

标签: c# asp.net iis

在阅读了有关集成管道的一些文档后,我很困惑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

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

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

我觉得这里有一些我不知道的东西,有人能说清楚preCondition =“managedHandler”是如何工作的吗?

1 个答案:

答案 0 :(得分:8)

来自此博文(http://blogs.iis.net/thomad/archive/2006/11/04/precondition-what.aspx):

  

ManagedHandler前提条件

     

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

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

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

open this section in IIS

Then you will see all the registered mappings