会话状态模式设置为 SQLSERVER 出现错误

问题描述 投票:0回答:1

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

asp.net session-state
1个回答
0
投票

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

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

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

[SerializationException:在程序集中键入“admin+users+stUsers” 'App_Code.3_0rnsep,版本=0.0.0.0,文化=中性, PublicKeyToken=null' 未标记为可序列化。]

我在我的结构体上添加了 [Serialized] 标签,问题就消失了。

[Serializable]
public struct stUsers
{ .... }
© www.soinside.com 2019 - 2024. All rights reserved.