我继承了一个非常大的ASP.NET应用程序,需要修改它才能使用状态服务器而不是进程内会话。我需要在整个应用程序中跟踪会话中使用的所有类,然后确定它们是否可以序列化。是否有任何工具可用于分析代码以确定会话中使用的类?
答案 0 :(得分:1)
在Visual Studio中,您可以使用通配符映射进行搜索,并搜索类似Session [* =。
的模式另一种方法是在调试时使用立即窗口,并在导航您的站点后请求处于会话状态的内容。不完全证明,但它已经可以帮助。
另一种技术就是将会话状态设置为Sql Server或状态管理器模式(进程外),调试并查看如果对象无法序列化则开始抱怨的位置。与此同时,您还彻底测试了您的应用程序。
答案 1 :(得分: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);
}
}
}
然后在您喜欢的文本容器中显示“debug”字符串。
这很有用,因为简单地切换到State Manager / SQL Server确实会告诉你什么不能序列化,但它会停在第一个非序列化对象上。它也不会告诉你哪个键“拥有”该对象。