我已經繼承了一個非常大的ASP.NET應用程序,需要修改它才能使用狀態服務器而不是in-proc會話。我需要在整個應用程序中跟蹤會話中使用的所有類,然後確定它們是否可以序列化。是否有任何工具可用於分析代碼以確定會話中使用的類?確定ASP.NET中的哪些對象用於會話中
4
A
回答
1
您可以方便地使用以下(C#)當前會話對象的快速的「快照」代碼:
BinaryFormatter b = new BinaryFormatter();
StringBuilder debug = new StringBuilder();
MemoryStream m;
foreach (String s in Session.Keys) {
// try to serialize the object
var obj = Session[s];
if (obj != null) {
m = new MemoryStream();
try {
b.Serialize(m, obj);
debug.AppendFormat("{0}: {1} bytes\n", s, m.Length);
}
catch (Exception ex) {
debug.AppendFormat("ERROR: {0}, Message: {1}\n", s, ex.Message);
}
}
}
然後顯示在你喜歡的文本容器中的「調試」字符串。
這很有幫助,因爲只需切換到狀態管理器/ SQL Server就可以告訴你什麼不能被序列化,但它會停在第一個不可序列化的對象上。它也不會告訴你哪個鍵「擁有」該對象。
1
在Visual Studio中,您可以使用通配符映射進行搜索並搜索類似於Session [* =的模式。
另一種方法是在調試時使用立即窗口,並在瀏覽您的網站後請求會話狀態。沒有充分的證據,但已經可以提供幫助。
另一種技術就是將會話狀態設置爲Sql Server或狀態管理器模式(out of process),調試並查看在對象無法序列化的情況下開始投訴的位置。在同一時間,您還會徹底測試您的應用程序。
相關問題
- 1. 會話對象包含哪些內容?
- 2. 在ASP.NET中使用會話對象
- 3. 關於ASP.NET會話的不確定性
- 4. 確定哪些對象引用SQL Server中的表
- 5. 哪種方法用於在會話中存儲對象?
- 6. Java - 哪些對象存在於PSOldGen中?
- 7. Rails的:確定哪些模型中的對象是源自
- 8. 當Hibernate刷新會話時,它如何決定會話中的哪些對象是髒的?
- 9. 確定哪些對象屬於選擇矩形(選取框)
- 10. 在asp.net中的類對象中調用會話變量
- 11. 我們應該在哪裏管理ASP.NET應用程序中的會話對象?
- 12. 確定哪個用戶會話失效
- 13. 如何確定postgres中哪些對象不處於先決條件狀態?
- 14. 對於一些無效的請求,會話對象變爲空
- 15. 確定報表服務中的對象位於哪個頁面
- 16. playframework中的對象會話
- 17. 會話中的Codeigniter對象?
- 18. 在asp.net中輸入會話對象類型對象(類)c#
- 19. 確定是否ASP.NET會話啓用
- 20. ASP.NET - 使用會話存儲FileUpload對象
- 21. 如何確定哪些視圖用於調用視圖(對象模型)
- 22. 從會話中取消綁定對象
- 23. Qt中有哪些用於序列化對象圖的方法?
- 24. 確定哪些AlertDialog引發的onClick(DialogInterface對話框,INT)
- 25. 如何確定對象圖中的哪個對象導致SerializationException
- 26. PHP哪些變量保存在會話中 - 哪些不保存
- 27. 內存中的哪些對象位於靜態塊中創建的對象?
- 28. 確定在ASP.NET MVC中未選中哪些複選框?
- 29. 確定類中使用哪些類
- 30. jjs中有哪些對象可用?