与This Question类似,我的应用程序在很大程度上依赖于进程内会话。我现在正在尝试将会话存储移动到本地State Server。
我收到了错误:
在Assembly'System.Web中输入'System.Web.UI.Control',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化。
问题是我无法确定哪个控件正在尝试序列化。
完整的异常和堆栈跟踪不会向我显示任何其他信息。
有没有办法确定哪些控件试图序列化?
使用ASP.net,IIS7,Framework 4.0
答案 0 :(得分:1)
对Session[
或Session.Item
进行全局搜索,并使用右侧的=找到所有内容。这就是Session的所有任务。几百个不能超过我。其中之一是System.Web.UI.Control。它可能被放入会话以避免命中数据库。重写该代码以存储DataTable或DataSet或其他值,而不是存储Control。
如果你没有源代码,就没有一种简单的方法可以解决这种反编译,修复代码和重新编译的问题。
即使您放弃了SqlSession,您仍可能希望停止将UI控件放入Session中 - 它可能会导致OutOfMemory问题:http://blogs.msdn.com/b/tess/archive/2008/05/28/asp-net-memory-thou-shalt-not-store-ui-objects-in-cache-or-session-scope.aspx