【问题标题】:Custom MySQL session store provider - deserialization issue自定义 MySQL 会话存储提供程序 - 反序列化问题
【发布时间】:2016-07-22 05:41:26
【问题描述】:

我已将我的项目从 MSSQL 迁移到 MySQL,我必须实现的功能之一是可以在 db 端存储会话,因此必须配置自定义会话存储提供程序。我使用 Visual Studio 的 MySQL 连接器来正确设置会话提供程序。这是我的 web.config 中的一个 sn-p:

<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 ..)所以,我的问题是还有什么可能导致这个问题?问题是我什至无法检测到此问题发生的确切位置。任何建议表示赞赏。

【问题讨论】:

  • 如果不访问代码,此类问题很难调试。使用 sql server 完全相同的代码可以正常工作吗?您在会话中存储的类是什么?您是否看到数据库中会话的大小随着时间的推移而增长?
  • 您的问题是,可能由于某处代码中的某些错误,您在SessionStateItemsCollection 中存储了越来越多的项目,直到最终无法为底层数组需要保存所有项目,你会得到这个异常。有关数组大小限制,请参阅 stackoverflow.com/questions/5367320stackoverflow.com/questions/23206496blogs.msdn.microsoft.com/ericlippert/2009/06/08/…
  • 您可以直接查询您的 MySQL 数据库以查看您的会话存储有多大,以及是什么占用了所有空间?

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


【解决方案1】:

能否请您重新检查一下您的类中的所有项目都是公开的[在序列化期间不会处理私有成员]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多