【问题标题】:The SessionStateTempDataProvider requires SessionState to be enabledSessionStateTempDataProvider 需要启用 SessionState
【发布时间】:2009-04-06 05:44:40
【问题描述】:

我的混合(Web 表单/MVC)项目在我的本地开发环境中运行良好,但是当我将 (xcopy) 部署到我的测试环境时,我收到需要 SessionState 的错误(如下所示的完整错误)。

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

我正在运行一个经典的 Web 表单站点,并且只有一小部分要迁移到 MVC 1.0。现在我的常规 web 表单 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

【问题讨论】:

  • 我也有同样的异常 可能是部分操作的语法错误,尝试调试。我认为它在会话中保存异常

标签: asp.net-mvc


【解决方案1】:

Google 已解决:我将此属性添加到 web.config 中的模块节点,一切都神奇地开始工作:

<modules runAllManagedModulesForAllRequests="true">

看来我并不孤单:

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

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

我认为我的纯 MVC 项目(在测试环境中工作)太简单了,可能没有强制 MVC 框架需要 TempData 和 SessionState,所以我将这样解释它;-)

【讨论】:

  • 祝你好运!我仍在尝试在部署到 iis 6 虚拟目录的沼泽标准 mvc 应用程序上修复此问题。我的 web 配置和 iis 都启用了会话状态,并且我的模块部分已经包含为您修复此问题的 sn-p。我被难住了。
  • 类似,有一个 MVC 4 应用程序,在上述 下默认具有 。在本地工作,但部署在 IIS7 登录工作,但重定向后无法识别会话。添加 - 一切正常!
【解决方案2】:

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

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

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

我继续收到相同的错误消息....非常混乱!

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

【讨论】:

    【解决方案3】:

    将以下内容添加到&lt;system.webServer&gt; &lt;modules&gt;

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        【解决方案5】:

        如果你碰巧使用SQLServer作为sessionState模式比如

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

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

        【讨论】:

          【解决方案6】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-02
            • 2011-04-28
            相关资源
            最近更新 更多