2013-11-01 40 views
1

此刻我有属性runAllManagedModulesForAllRequests="true"设置,所以我的模块正在运行的所有请求。我想这包括SessionStateModuleSessionStateModule vs runAllManagedModulesForAllRequests =“true”

当试图访问会话对象在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

有人知道为什么SessionStateModule跳过对非管理资源的请求,即使设置了属性runAllManagedModulesForAllRequests

干杯。

回答

3

看起来IIS使用托管处理程序的先决条件加载默认模块以确保向后兼容。 http://forums.iis.net/post/1904024.aspx

+0

按照此链接:http://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview#Precondition当你有runAllManagedModulesForAllRequests = TRUE,前提条件没有影响。此行为虽然可能会根据管道模式(集成或经典)而有所不同。你可以添加你使用的管道模式。 – dotnetguy

相关问题