【问题标题】:Determine which objects in ASP.NET are used in session确定会话中使用了 ASP.NET 中的哪些对象
【发布时间】:2023-03-30 02:32:01
【问题描述】:

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

【问题讨论】:

    标签: .net asp.net visual-studio optimization session


    【解决方案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 确实会告诉你什么不能被序列化,但它会在第一个不可序列化的对象处停止。它也不会告诉您哪个键“拥有”该对象。

    代码改编自this Stackoverflow answer

    【讨论】:

      【解决方案2】:

      在 Visual Studio 中,您可以使用通配符映射进行搜索并搜索诸如 Session[*=.

      之类的模式

      另一种方法是在调试时使用即时窗口,并在浏览您的站点后请求会话状态中的内容。不是完整的证据,但它已经可以提供帮助。

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

      【讨论】:

        猜你喜欢
        • 2016-04-06
        • 1970-01-01
        • 2016-03-17
        • 2012-11-13
        • 1970-01-01
        • 2010-11-25
        • 2012-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多