архитектура сессии в asp.net - PullRequest
1 голос
/ 28 июня 2011

У меня есть объект, который выглядит так:

public class MySession{

   string UserID {get;set;}
   List<Object1> ListOfObject1 {get;set;}
   List<Object2> ListOfObject2 {get;set;}
   ....
   several other lists....
}

Преимущество этого состоит в том, что я могу написать что-то вроде "при загрузке страницы" MySession TheSession = Session["TheSession"] as MySession;, а затем более легко получить доступ к свойствам сеанса в коде.

Пока что это работает с сеансом InProc, но я хочу перейти к сеансу SQL Server.

Какой лучший способ сделать это изменение? Я подумываю о сериализации объекта MySession в строку json, а затем позволить сеансу SQL Server сохранить сеанс в виде строки. Затем, когда я перезагружаю сессию, просто загружаю строку json и десериализую ее.

Я не знаю, является ли это наиболее эффективным способом сделать это. Спасибо за ваши предложения.

Ответы [ 3 ]

2 голосов
/ 28 июня 2011

Все, что вам нужно сделать, это сделать MySession и все связанные классы [Serializable] (двоичная сериализация).

ASP.Net автоматически сериализует его для вас.

1 голос
/ 28 июня 2011

Пока вы помечаете свой класс атрибутом [Serializable] и он фактически сериализуем, вам не нужно выполнять свою собственную сериализацию вручную.Если ваше веб-приложение настроено правильно для внепроцессного управления состоянием сеанса и все, что вы вставляете в сеанс, является сериализуемым, все должно работать.

1 голос
/ 28 июня 2011

Если эффективность - единственная проблема, я не уверен, что вы выиграете много, если у некоторых пользователей граф объектов не слишком велик.При значениях по умолчанию для сеанса он сериализуется в двоичном формате, который упаковывает даже больше, чем ваш JSON.

Если вам нужна читаемость битов сеанса (отладка?), Тогда вы можете пойти своим путем.

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