我已将项目从MSSQL迁移到MySQL,我必须实现的功能之一就是可以在db端存储会话,因此必须配置自定义会话存储提供程序。我使用MySQL连接器为visual studio正确设置会话提供程序。这是我web.config中的一个片段:
<connectionStrings>
<remove name="LocalMySqlServer" />
<add name="LocalMySqlServer" connectionString="server=<SERVER>;user=<USER>;pwd=<PASSWORD>;port=<PORT>;database=<DBNAME>;AutoEnlist=false;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<system.web>
<sessionState mode="Custom" cookieless="false" timeout="20" allowCustomSqlDatabase="true" regenerateExpiredSessionId="true" customProvider="MySqlSessionStateProvider">
<providers>
<clear/>
<add name="MySqlSessionStateProvider" type="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="My Local Session State" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" enableExpireCallback="False" />
</providers>
</sessionState>
...
</system.web>
运行我的应用程序后,修改了数据库模式并创建了所有必需的表:
此外,我检测到在执行会话表中填充了会话信息,所以我发信号是一个很好的信号,表明连接正常,MySQL自定义提供程序正在做的事情。
不幸的是,经过一段时间后,我的应用程序因System.OutOfMemoryException而失败。堆栈跟踪看起来像:
我的假设是会话项反序列化存在一些问题。我有几个存储在会话中的类,所有类都由适当的[Serializable]
属性标记。其他项目有原始类型(bool,int ..)所以,我的问题是还有什么可能导致这个问题?问题是我甚至无法检测到此问题发生的确切位置。任何建议都表示赞赏。
答案 0 :(得分:0)
请您重新检查您班级内的所有项目是否公开[序列化期间不会照顾私人成员]。