0

This Question類似,我有一個應用程序嚴重依賴於進程內會話。我現在試圖將會話存儲移動到本地狀態服務器。確定哪個控件正在序列化

,我發現了錯誤:

Type 'System.Web.UI.Control' in Assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.

問題是我不能決定哪個是試圖序列化。

完整的例外和堆棧跟蹤沒有顯示任何附加信息。

有沒有辦法確定哪些控件試圖序列化?

採用ASP.net,IIS7,框架4.0

+0

爲什麼控制被序列化,並存儲在會話擺在首位? –

+0

好問題。 :)這是我繼承的遺留應用程序,並且正在更新。一個目標是完全停止將它們存儲在會話中。 – AaronS

+0

你是否已經縮小到至少一頁?你可以在某處設置一個斷點來查看炸彈在哪裏? –

回答

1

Session[Session.Item全局搜索,找到與=向右一切。這就是Session的所有任務。它不能超過幾百個。其中之一是一個System.Web.UI.Control。它可能被放入會話中以避免觸擊數據庫。重寫該代碼以存儲DataTable或DataSet或其他值而不是存儲Control。

如果您沒有源代碼,那麼處理這一短的反編譯,修復代碼和重新編譯並不是一個簡單的方法。

即使你放棄的SqlSession,你仍然可能要停止把UI控件到Session--它可能會導致內存溢出的問題: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

+0

它們都不是通過會話[「」]直接添加的。我相信它們隱藏在數據對象的某個位置,但多次搜索都沒有發現。最終的目標是確保沒有人會被添加到會話中,只要我能確定它們在哪裏。 – AaronS

+0

打開trace.axd並檢查會話變量。它將顯示關鍵,類型和價值。然後在源代碼中搜索該密鑰。同樣,如果您沒有源代碼(即,如果這是第三方代碼或源代碼丟失),這將不會有解決方案。 – MatthewMartin

+0

良好的通話。雖然這並沒有直接告訴我是什麼導致了這個問題,但它確實告訴我哪些特定數據對象存儲在會話中。我能夠逐步通過其中的每一個來確定控件的添加位置。謝謝您的幫助。 – AaronS

相關問題