SessionStateTempDataProvider需要启用SessionState

时间:2009-04-06 05:44:41

标签: asp.net-mvc

我的混合(Web窗体/ MVC)项目在我的本地开发环境中工作正常但是当我将(xcopy)部署到我的Test环境时,我得到了需要SessionState的错误(完整错误如下所示)。

此错误消息的一个奇怪之处是我的web.config中的会话状态设置为 InProc ,IIS7配置也显示它。

我正在运行一个经典的Web表单站点,只有一个小部分,我正在转移到MVC 1.0。现在我的常规网络表单default.aspx页面无法启动!

  • 在MVC中根本使用TempData提供程序所以我猜这个框架出于某种原因但是,我的SesionState已启用...
  • 我的测试环境在集成模式的IIS 7上运行,我的webconfig将sessionstate作为InProc运行正常。

更多信息:为了好玩,我创建了一个仅作为MVC的存根项目并将其部署到测试环境,它工作正常! web.config的基本相同,一个有效,另一个无效。

感谢任何帮助。


错误消息

'/'应用程序中的服务器错误。

SessionStateTempDataProvider要求启用SessionState。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.InvalidOperationException:SessionStateTempDataProvider要求启用SessionState。 来源错误: 在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

堆栈追踪:

[InvalidOperationException:SessionStateTempDataProvider要求启用SessionState。]    System.Web.Mvc.SessionStateTempDataProvider.LoadTempData(ControllerContext controllerContext)+247928    System.Web.Mvc.TempDataDictionary.Load(ControllerContext controllerContext,ITempDataProvider tempDataProvider)+30    System.Web.Mvc.Controller.ExecuteCore()+ 71    System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)+209    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+599    System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+171

6 个答案:

答案 0 :(得分:12)

Google Solved:我将此属性添加到web.config中的modules节点,并且一切都神奇地开始工作:

<modules runAllManagedModulesForAllRequests="true">

看起来我并不孤单:

http://forums.asp.net/p/1293974/2509190.aspx

http://www.flyvergrillen.dk/2009/03/26/being-trapped-in-iis/

我认为我的纯MVC项目(在Test环境中工作)过于简单,可能没有强制MVC框架要求TempData和SessionState,所以我将如何解释它; - )

答案 1 :(得分:5)

我遇到了同样的问题,当然也遇到了同样的错误。即使我不需要我的MVC应用程序的Session状态,我只是对启动和运行应用程序感兴趣所以愿意启用会话状态......为什么不呢!

即使将会话状态设置添加到我的web.config文件,

<system.web>...<sessionState mode="InProc" />...</system.web>

我继续收到相同的错误消息....非常令人困惑!。

我发现了以下解释,这是该问题的最终解决方案。在集成模式下运行应用程序池时,必须确保IIS已定义会话状态模块映射。

答案 2 :(得分:4)

将以下内容添加到<system.webServer> <modules>

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

答案 3 :(得分:0)

将以下条目添加到system.webServer/handlers

<add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc"/>

path="*.mvc"更改为您正在使用的扩展/路径。

使用runAllManagedModulesForAllRequests="true"不是一个非常好的解决方案,因为所有模块都会针对每个请求运行,包括静态文件,这可能对性能不利。

答案 4 :(得分:0)

如果您碰巧使用SQLServer作为sessionState模式,例如

<sessionState mode="SQLServer" sqlConnectionString="data source=server;integrated security=true" cookieless="false" />

确保连接字符串正确并且您具有数据库权限。我意识到这个问题是针对InProc模式的,但是当我忘记向我的应用程序运行的帐户授予privs时,我遇到了同样的错误,这个问题在我的Google搜索中是最受欢迎的。

答案 5 :(得分:0)

如果您将SessionState配置为使用StateServer,请确保您的ASP.NET状态服务(aspnet_state.exe)正在运行:

<sessionState mode="StateServer" ... />

这就是我犯这个错误的原因。