我们正在使用动态编译的ASP.NET网站项目,并且最近移至SQL Server支持的会话状态并开始出现奇怪的错误。我已经找出了造成这种情况的原因,但我不知道解决问题的最佳方法。ASP.NET网站+ SQL备份会话
重现步骤在本地主机(启用SQL会话):
放置在AppCode定义的对象,可以说这是一个
DanObject
到会话中。Session [“x”] = new DanObject();
(会话被序列化到数据库)
- 修改应用程序代码的东西,导致网站重新编译的下一个请求
- 请给访问会话的任何页面的请求
错误是“无法找到程序集”App_SubCode_CS.rmdbqb81,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'。“
发生什么事是每次AppCode被编译时,它会进入一个随机命名的程序集。当我的会话第一次序列化时,AppCode碰巧被命名为AppCode_123。当我修改我的应用程序时,AppCode现在是AppCode_456。然而,存储在我的数据库中的Session有一个在AppCode_123中定义的对象。当会话尝试对DanObject进行二进制反序列化时,它会因为无法找到AppCode_123而炸毁。
我能解决这个问题的最简单方法是什么?
*请不要说切换到Web应用程序 - 我们的代码库是巨大的,这是不可行的,在这一点上:)
+1:到目前为止,对于一个巨大的应用程序最简单的修复。当然,我建议不要在会话中存储完整的对象,但听起来这个项目已经是一个性能噩梦,所以在这一点上它可能并不重要。 – NotMe 2011-03-04 17:35:51
@Chris Lively就是这样,我已经开始写作关于进入单独的图书馆,看看你在序列化的东西,但是我认为我现在会回答KISS,回答是明智的。 – dove 2011-03-04 17:37:21
这没有奏效。我认为BinarySerializer正在使用AssemblyQualifiedName,它包括AppCode – dan 2011-03-04 18:17:13