каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
Есть класс CustomerInfo, у которого есть поля простого типа и другого моего класса (ContactInfo).
Когда пытаюсь получить сохраненный в сессии экземпляр,
Dim _aCustomer As CustomerInfo = CType(Session("aCustomer"), CustomerInfo)
то вылетает "Object reference not set to an instance of an object."
Здравствуйте, TK, Вы писали:
TK>Hello, "pavelsha" >> каким должен быть класс чтобы его экземпляры можно было сохранять в Session? >>
TK>Очень желательно, что-бы класс был сериализируемым.
Ты ничего не путаешь?
... << RSDN@Home 1.1.3 beta 1 >>
Re[3]: как хранить экземпляр моего класса в Session
Здравствуйте, pavelsha, Вы писали:
P>каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
P>Есть класс CustomerInfo, у которого есть поля простого типа и другого моего класса (ContactInfo).
P>Когда пытаюсь получить сохраненный в сессии экземпляр, P>Dim _aCustomer As CustomerInfo = CType(Session("aCustomer"), CustomerInfo) P>то вылетает "Object reference not set to an instance of an object."
P>Переменные простого типа передаются нормально.
А не удобнее ли хранить объекты в коллекции с ключом SessionID?
Re[2]: как хранить экземпляр моего класса в Session
Здравствуйте, Stewe, Вы писали:
S>Здравствуйте, pavelsha, Вы писали:
P>>каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
P>>Есть класс CustomerInfo, у которого есть поля простого типа и другого моего класса (ContactInfo).
P>>Когда пытаюсь получить сохраненный в сессии экземпляр, P>>Dim _aCustomer As CustomerInfo = CType(Session("aCustomer"), CustomerInfo) P>>то вылетает "Object reference not set to an instance of an object."
P>>Переменные простого типа передаются нормально. S>А не удобнее ли хранить объекты в коллекции с ключом SessionID?
А можно кратко об преимуществах такого способа? Где можно посмотреть примеры и почитать о нем?
Дополню свой вопрос.
P>каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
Как я понял, чтобы просто хранить в Session/Application объект, класс не должен наследовать от специального, атрибуты и интерфейсы тоже не нужны.
P>Есть класс CustomerInfo, у которого есть поля простого типа и другого моего класса (ContactInfo).
P>Когда пытаюсь получить сохраненный в сессии экземпляр, P>Dim _aCustomer As CustomerInfo = CType(Session("aCustomer"), CustomerInfo) P>то вылетает "Object reference not set to an instance of an object."
Как мне говорили на aspnetmania.com сессия в ASP.NET легко может слететь, поэтому проверка наличия объекта обязательна.
Возникает вопрос, что делать чтобы сессия не слетала? В одном из ответов упоминали хранилище. Можно об этом варианте кратко?
Re[2]: как хранить экземпляр моего класса в Session
Здравствуйте, pavelsha, Вы писали:
P>Возникает вопрос, что делать чтобы сессия не слетала? В одном из ответов упоминали хранилище. Можно об этом варианте кратко?
настрой в конфиге в секции <sessionState> аттрибут StateServer или SqlServer.
Re[3]: как хранить экземпляр моего класса в Session
Здравствуйте, pavelsha, Вы писали:
P>Здравствуйте, Stewe, Вы писали:
S>>Здравствуйте, pavelsha, Вы писали:
P>>>каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
P>>>Есть класс CustomerInfo, у которого есть поля простого типа и другого моего класса (ContactInfo).
P>>>Когда пытаюсь получить сохраненный в сессии экземпляр, P>>>Dim _aCustomer As CustomerInfo = CType(Session("aCustomer"), CustomerInfo) P>>>то вылетает "Object reference not set to an instance of an object."
P>>>Переменные простого типа передаются нормально. S>>А не удобнее ли хранить объекты в коллекции с ключом SessionID?
P>А можно кратко об преимуществах такого способа? Где можно посмотреть примеры и почитать о нем?
Не знаю насчет преимуществ, но основная идея такая: хранить объекты не в сессии, а специально созданной для этого коллекции (например Hashtable), где ключом будет свойство Session.SessionID, а значением — объект своего типа. По завершении сессии эти объекты можно удалять в обработчике Session_End.
Re[4]: как хранить экземпляр моего класса в Session
Здравствуйте, Stewe, Вы писали:
S>Не знаю насчет преимуществ,
Хорошее начало
S>но основная идея такая: хранить объекты не в сессии, а специально созданной для этого коллекции (например Hashtable)
А где хранить коллекцию?
S>, где ключом будет свойство Session.SessionID, а значением — объект своего типа.
А если мне надо два объекта? Я-то вообще думал что идея — хранить в Session по айди сессии свою коллекцию, а там по своим ключам — свои объекты. Но мне непонятно, зачем так сложно?
S>По завершении сессии эти объекты можно удалять в обработчике Session_End.
Ну, в большинстве случаев GC спраится сам. Наверное в специфических ситуациях такой способ себя оправдывает.
Мне звонили с открытия пленума — я сказал им, что я не приду
Здравствуйте, Gollum, Вы писали:
G>Здравствуйте, Stewe, Вы писали:
S>>Не знаю насчет преимуществ,
G>Хорошее начало
S>>но основная идея такая: хранить объекты не в сессии, а специально созданной для этого коллекции (например Hashtable)
G>А где хранить коллекцию?
S>>, где ключом будет свойство Session.SessionID, а значением — объект своего типа.
G>А если мне надо два объекта? Я-то вообще думал что идея — хранить в Session по айди сессии свою коллекцию, а там по своим ключам — свои объекты. Но мне непонятно, зачем так сложно?
S>>По завершении сессии эти объекты можно удалять в обработчике Session_End.
G>Ну, в большинстве случаев GC спраится сам. Наверное в специфических ситуациях такой способ себя оправдывает.
Я так понимаю, что нужно сохранять какой-то свой объект(объекты) для каждого сеанса, поэтому в классе Global можно создать, например, хеш-таблицу, а в нее добавлять все что угодно. Если своих объектов несколько, написать свой класс, в котором объединено все что нужно будет сохранять, и добавлять(изменять) объект этого класса.
Возможно, если планируется большая нагрузка на приложение, такой вариант будет слишком ресурсоемким, поэтому я ничего не могу сказать о преимуществах.
Re[6]: как хранить экземпляр моего класса в Session
Здравствуйте, Stewe, Вы писали:
S>Я так понимаю, что нужно сохранять какой-то свой объект(объекты) для каждого сеанса, поэтому в классе Global можно создать, например, хеш-таблицу,
То есть, статическую? Я чего-то не понимаю — она будет одна на приложение тогда.
S>а в нее добавлять все что угодно. Если своих объектов несколько, написать свой класс, в котором объединено все что нужно будет сохранять, и добавлять(изменять) объект этого класса. S>Возможно, если планируется большая нагрузка на приложение, такой вариант будет слишком ресурсоемким, поэтому я ничего не могу сказать о преимуществах.
Объясни, зачем писать свою реализацию Session?
И начальник заставы поймет меня, и беспечный рыбак простит
Здравствуйте, Gollum, Вы писали:
G>Здравствуйте, Stewe, Вы писали:
S>>Я так понимаю, что нужно сохранять какой-то свой объект(объекты) для каждого сеанса, поэтому в классе Global можно создать, например, хеш-таблицу,
G>То есть, статическую? Я чего-то не понимаю — она будет одна на приложение тогда.
Вот именно одна. В её элементах ключом будет SessioID, а значением объект (набор объектов), которые мы хотим хранить в течении времени сессии.
S>>а в нее добавлять все что угодно. Если своих объектов несколько, написать свой класс, в котором объединено все что нужно будет сохранять, и добавлять(изменять) объект этого класса. S>>Возможно, если планируется большая нагрузка на приложение, такой вариант будет слишком ресурсоемким, поэтому я ничего не могу сказать о преимуществах.
G>Объясни, зачем писать свою реализацию Session?
Так ведь вопрос был о невозможности хранения объектов своего типа в Session.
Re[8]: как хранить экземпляр моего класса в Session
Здравствуйте, Stewe, Вы писали:
G>>Объясни, зачем писать свою реализацию Session? S>Так ведь вопрос был о невозможности хранения объектов своего типа в Session.
Теперь понял. Хранить можно — тут видимо какие-то глюки, может действительно связанные с попыткой хранить сессию в SQL или stateserver.
Но я думаю, что здесь все более банально — либо куки не подцепляются с session id, либо еще что-то в этом же духе.
В лучших книгах всегда нет имен, и в лучших картинах — лиц