我继承了一个非常大的ASP.NET应用程序,需要修改它以使用状态服务器而不是进程内会话.我需要在整个应用程序中跟踪会话中使用的所有类,然后确定它们是否可以序列化.是否有任何工具可用于分析代码以确定会话中使用的类? 最佳答案 您可以使用以下(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”字符串.
这很有用,因为简单地切换到状态管理器/ SQL Server确实会告诉您什么不能序列化,但它将停在第一个非序列化对象.它也不会告诉你哪个键“拥有”该对象.