繁体   English   中英

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

[英]Determine which objects in ASP.NET are used in session

我继承了一个非常大的ASP.NET应用程序,需要对其进行修改以使用状态服务器而不是进程内会话。 我需要跟踪整个应用程序会话中使用的所有类,然后确定它们是否可以序列化。 是否可以使用任何工具来分析代码以确定会话中使用的类?

在Visual Studio中,您可以使用通配符映射进行搜索,并搜索类似Session [* =]的模式。

另一个方法是在浏览网站后调试并请求会话状态中的内容时使用即时窗口。 没有充分的证据,但已经可以提供帮助。

另一种技术是将会话状态设置为Sql Server或状态管理器模式(进程外),调试并查看如果对象无法序列化,它将在哪里开始抱怨。 同时,您还再次彻底测试了您的应用程序。

您可以使用以下(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);
        }
    }
} 

然后在您喜欢的文本容器中显示“调试”字符串。

这很有用,因为仅切换到State Manager / SQL Server确实会告诉您无法序列化的内容,但是它将在第一个不可序列化的对象处停止。 它还不会告诉您哪个键“拥有”该对象。

Stackoverflow答案改编的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM