自定义MySQL会话存储提供程序 - 反序列化问题

时间:2016-04-02 11:53:20

标签: c# mysql asp.net serialization session-state

我已将项目从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>

运行我的应用程序后,修改了数据库模式并创建了所有必需的表:

enter image description here

此外,我检测到在执行会话表中填充了会话信息,所以我发信号是一个很好的信号,表明连接正常,MySQL自定义提供程序正在做的事情。

enter image description here

不幸的是,经过一段时间后,我的应用程序因System.OutOfMemoryException而失败。堆栈跟踪看起来像:

enter image description here

我的假设是会话项反序列化存在一些问题。我有几个存储在会话中的类,所有类都由适当的[Serializable]属性标记。其他项目有原始类型(bool,int ..)所以,我的问题是还有什么可能导致这个问题?问题是我甚至无法检测到此问题发生的确切位置。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

请您重新检查您班级内的所有项目是否公开[序列化期间不会照顾私人成员]。