Определите, какие объекты в ASP.NET используются в сеансе - PullRequest
4 голосов
/ 17 августа 2010

Я унаследовал очень большое приложение ASP.NET, которое необходимо изменить, чтобы использовать State Server вместо сессий in-proc.Мне нужно отследить все классы, используемые в сеансе во всем приложении, а затем определить, можно ли их сериализовать.Существуют ли какие-либо инструменты, которые можно использовать для анализа кода, чтобы определить классы, используемые в сеансе?

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Вы можете легко получить быстрый «снимок» объектов текущего сеанса, используя следующий (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 .

1 голос
/ 17 августа 2010

В Visual Studio вы можете выполнять поиск с использованием подстановочных знаков и искать шаблон, например, Session [* =.

Еще один вариант - использовать Immediate Window во время отладки и запрашивать, что находится в состоянии Session после навигации по вашему сайту. Не полное доказательство, но оно уже может помочь.

Другим методом будет просто установить состояние сеанса на Sql Server или режим диспетчера состояний (вне процесса), отладить и посмотреть, где он начинает жаловаться, если объекты не могут быть сериализованы. В то же время вы снова тщательно протестировали свое приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...