【问题标题】:Session state mode set to SQLSERVER getting error会话状态模式设置为 SQLSERVER 出现错误
【发布时间】:2011-09-12 09:31:40
【问题描述】:

我想将我的会话存储在 SQL Server 数据库中,为此我想使用会话状态模式 SQLSERVER,我更改了我的 web.config 并添加了会话状态属性:

<sessionState mode="SQLServer" timeout="30" sqlConnectionString="Data Source=server;user id=sa;password=sa;" cookieless="false" />

当我运行我的应用程序时,我收到了这个错误:

无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。

请帮帮我,我遇到了严重的问题。谢谢和问候。

【问题讨论】:

  • 你的代码是什么?您尝试将什么放入会话中?像错误状态一样,您不能放置任何对象。
  • 实际上我正在创建包含简单 aspx 页面的演示应用程序,后面的代码没有任何内容,它是空白的。
  • 某处某处正在为 Session 分配某些内容。您可以发布异常的完整堆栈跟踪吗?
  • 无法序列化会话状态。在“StateServer”和“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许不可序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
  • 不,这只是消息。在此下方,您应该会看到一些称为堆栈跟踪的行,并告诉您错误来自何处。请复制这些行并edit您的问题。

标签: asp.net session-state


【解决方案1】:

这个问题很老但没有有效的答案,我遇到了同样的问题并在另一个网站上找到了解决方案。由于这个主题是谷歌上的第一个结果,我在这里为其他人添加解决方案。

问题在于将结构对象添加到会话中。 ASP.NET Web 应用程序以不同的方式处理会话对象的存储,从 InProc 模式到 SQLServer 模式。将会话对象存储到 SQL Server 时,.NET 框架将序列化对象。这是必要的,因为会话对象需要从服务器传输到服务器。

堆栈跟踪(错误页面上的黄色部分)准确显示导致问题的对象。就我而言:

[SerializationException: Type 'admin+users+stUsers' in Assembly 'App_Code.3_0rnsep,版本=0.0.0.0,文化=中性, PublicKeyToken=null' 未标记为可序列化。]

我在结构上方添加了 [Serializable] 标签,问题就消失了。

[Serializable]
public struct stUsers
{ .... }

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2013-02-19
    • 2012-12-09
    • 2013-05-03
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多