【问题标题】:Session state can only be used when enableSessionState is set to true either in a configuration只有在配置中将 enableSessionState 设置为 true 时,才能使用会话状态
【发布时间】:2012-12-29 08:09:18
【问题描述】:

我正在使用 vs 2010 使用 c# 开发 Asp.net MVC 2 应用程序。当我在调试模式下本地运行我的应用程序时,我遇到了下面提到的错误。

错误信息图片如下:

错误信息如下:

会话状态只能在 enableSessionState 设置为 true 时使用, 在配置文件或 Page 指令中。还请 确保 System.Web.SessionStateModule 或自定义会话状态 模块包含在<configuration>\<system.web>\<httpModules> 应用程序配置中的部分。

我为解决这个问题所做的工作如下:

尝试 1:web.config 文件已更改如下:

<system.webServer>
       <modules runAllManagedModulesForAllRequests="true">
        <remove name="Session" />
        <add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
</system.webServer

尝试2如下:

但不幸的是,我仍然遇到上面提到的相同问题。

更新

你有什么解决办法吗?

【问题讨论】:

    标签: .net visual-studio-2010 session asp.net-mvc-2


    【解决方案1】:

    有时可能需要一个

    [WebMethod(EnableSession = true)]

    来自网络服务

    【讨论】:

      【解决方案2】:

      如果您在 Web.Config 中有以下内容,则会话状态可能会被破坏:

      <httpModules>
        <clear/>
      </httpModules>
      

      如果是这种情况,您可能需要注释掉该部分,并且您不需要任何其他更改来解决此问题。

      【讨论】:

        【解决方案3】:

        我仅在调试 ASP .Net 应用程序时遇到此错误。

        我还在我的 Visual Studio Watch 中添加了 Session["mysession"] 类型的变量。

        问题解决了一次,我从手表中删除了会话变量。

        【讨论】:

          【解决方案4】:

          对于 SharePoint 可以在 C:\inetpub\wwwroot\wss\VirtualDirectories\Sitecollection 端口号中找到 Web 配置文件 - 并进行更改

           <system.web>
            <pages enableSessionState="true" /> 
           </system.web>
          

          并使用 SharePoint 命令行管理程序在命令下方运行

             Enable-SPSessionStateService -DefaultProvision
          

          【讨论】:

            【解决方案5】:

            您是否也在该部分中启用了会话状态?

             <system.web>
                  <pages enableSessionState="true" /> 
             </system.web>
            

            或者您是否将其添加到页面中?

             <%@Page enableSessionState="true"> 
            

            您是否确认ASP.NET Session State Manager Service 服务正在运行?在您的屏幕截图中不是。它设置为启动模式Manual,这要求您每次要使用它时都要启动它。要启动它,请突出显示该服务并单击工具栏上的绿色播放按钮。要自动启动它,请编辑属性并调整启动类型。

            或者将SessionState的mode属性设置为InProc,这样就不需要状态服务了。

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

            检查MSDN for all the options available to you with regards to storing data in the ASP.NET session state


            注意:最好让控制器从会话中获取值并将值添加到页面/控件(或 ViewBag)的模型中,这样视图不依赖于 HttpSession 和您可以稍后通过最少的代码更改为该项目选择不同的源。或者更好,not use the session state at all。当您使用大量异步 javascript 调用时,它可能会影响您的性能。

            【讨论】:

            • 能否告诉我如何检查“ASP.NET 会话状态管理器服务”是否正在运行?
            • 在您的机器上打开“服务”面板(开始,运行services.msc)或在命令行上执行net start
            • 我已经更新了我的帖子,请检查是否是您提到的服务(红色的)?
            • 它对我不起作用,但下面的共享答案对我来说效果很好
            • @jessehouwing 除非我弄错了,您的页面和 sessionState 标记都需要以 / 结尾来关闭。我的设置抱怨他们不是。
            【解决方案6】:

            由于后面代码中网页的Public Sub New() (Visual Basic) 构造函数中引发了未处理的异常,因此为我引发了此错误。

            如果您实现了构造函数,请将代码包装在 Try/Catch 语句中,看看它是否解决了问题。

            【讨论】:

              【解决方案7】:

              在我的情况下,只需使用HttpContext.Current.Session 而不是Session,问题就解决了

              【讨论】:

                【解决方案8】:

                Following answer from below given path worked fine.

                我找到了一个完美的解决方案!将以下内容添加到 web.config:

                <system.webServer>
                <modules>
                <!-- UrlRewriter code here -->
                <remove name="Session" />
                <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
                </modules>
                </system.webServer>
                

                希望这对其他人有帮助!

                【讨论】:

                  【解决方案9】:

                  我想让大家知道,有时这个错误只是一些奇怪的内存错误的结果。重新启动你的电脑并回到视觉工作室,它就会消失!!奇怪! 在你开始像我一样玩弄你的网络配置文件等之前尝试一下!!!! ;-)

                  【讨论】:

                  • 我可以告诉我这是一个内存错误,因为如果我使用“调试 - 开始而不调试”运行我的应用程序它工作正常,但如果我运行“调试 - 开始调试”它就没有工作
                  【解决方案10】:
                  1. 可能是您的 Skype 在 80 端口拦截您的请求,在 Skype 选项中取消选中
                  2. 或者你的IE在没有代理的时候检查了代理连接
                  3. 或者你的提琴手可以拦截并充当代理,取消选中它!

                  解决了上面的问题,解决了我的问题!

                  海德科技

                  【讨论】:

                    【解决方案11】:

                    我知道有一个公认的答案,但这可能会对人们有所帮助。我发现在使用 IIS Express 8 在 Visual Studio 2012 中运行使用 NET 3.5 框架的 ASP.NET 站点时,我遇到了类似的问题。我尝试了上述所有解决方案,但都没有奏效 - 最后在内置的 VS 2012 网络服务器工作正常。不知道为什么,但我怀疑它是 3.5 框架和 IIS 8 之间的链接。

                    【讨论】:

                      【解决方案12】:

                      如果您正在运行 SharePoint 并遇到此错误,请不要忘记运行

                      Enable-SPSessionStateService -DefaultProvision
                      

                      否则您将继续收到上述错误消息。

                      【讨论】:

                      • + 1 用于修复主要错误,但是,在 IIS8、SQL2012、Win2012 和 SP2013 中运行时,会返回一个新错误:“无法序列化会话状态。在 'StateServer' 和 'SQLServer'模式下,ASP.NET 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef 对象。如果类似的序列化由自定义会话状态存储在“自定义”模式下完成,则适用相同的限制。"
                      • 在这样做之后,我还删除了 部分我已手动添加以停止格式错误的配置错误。
                      【解决方案13】:

                      其实jessehouwing给出了正常场景的解决方案。

                      但就我而言,我在web.config file 中启用了两种类型的会话

                      如下所示。

                      第一个:

                      <modules runAllManagedModulesForAllRequests="true">
                              <remove name="Session" />
                              <add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
                      </modules>
                      

                      第二个:

                      <sessionState mode="Custom" customProvider="DefaultSessionProvider">
                                  <providers>
                                      <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="PawLoyalty" applicationName="PawLoyalty"/>
                                  </providers>
                       </sessionState>
                      

                      所以在我的情况下,我必须评论第二个。B'cos 那件事是为了制作。当我评论第二个时,我的问题就消失了。

                      【讨论】:

                      • 谢谢!!!将模块注册到 &lt;modules&gt; 部分对我有用,而我遇到的错误是告诉我将它注册到 httpModules
                      猜你喜欢
                      • 2012-10-27
                      • 2021-05-13
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-12-14
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多