SessionStateModule vs runAllManagedModulesForAllRequests =“true”

时间:2013-11-01 12:40:56

标签: asp.net iis-7 iis-7.5 httpmodule integrated-pipeline-mode

目前我设置了属性runAllManagedModulesForAllRequests="true",因此我的模块正在运行所有请求。我想这包括SessionStateModule

当尝试在我的一个自定义模块中的PostAcquireRequestState事件处理程序中访问会话对象时,HttpContext.Current.Session为空时HttpApplication.Context.CurrentHandler为空(例如:对于JS / CSS文件),当处理程序为MvcHandler时它不为空(因为我猜它是一个托管处理程序)。

我一直在查看ILSpy中的SessionStateModule代码,我找不到在哪里决定跳过该请求的Session。

我一直在查看%windir%\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config并且没有提及SessionStateModule,并且在该文件夹的Web.config中我找到了:

<add name="Session" type="System.Web.SessionState.SessionStateModule" />

所以它没有使用任何先决条件,如managedHandler

是否有人知道为什么即使设置了属性SessionStateModulerunAllManagedModulesForAllRequests也会对非托管资源进行跳过请求?

干杯。

1 个答案:

答案 0 :(得分:3)

似乎IIS使用托管处理程序前置条件加载默认模块以确保向后兼容性。 http://forums.iis.net/post/1904024.aspx