会话状态模式设置为SQLSERVER获取错误

时间:2011-09-12 09:31:41

标签: asp.net session-state

我想将我的会话存储在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对象。如果自定义会话状态存储在“自定义”模式下完成类似的序列化,则适用相同的限制。

请帮助我,我遇到了严重的问题。谢谢&amp;问候。

1 个答案:

答案 0 :(得分:0)

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

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

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

  

[SerializationException:在Assembly中输入' admin + users + stUsers '   'App_Code.3_0rnsep,Version = 0.0.0.0,Culture = neutral,   PublicKeyToken = null'未标记为可序列化。]

我在我的结构中添加了 [Serializable] 标记,问题就消失了。

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