确定在会话中使用ASP.NET中的哪些对象

我继承了一个非常大的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确实会告诉您什么不能序列化,但它将停在第一个非序列化对象.它也不会告诉你哪个键“拥有”该对象.

代码改编自this Stackoverflow answer.

点赞