как хранить экземпляр моего класса в Session
От: pavelsha Россия http://www.pavelsha.pp.ru
Дата: 27.01.04 21:04
Оценка:
каким должен быть класс чтобы его экземпляры можно было сохранять в Session?

Есть класс CustomerInfo, у которого есть поля простого типа и другого моего класса (ContactInfo).

Когда пытаюсь получить сохраненный в сессии экземпляр,
Dim _aCustomer As CustomerInfo = CType(Session("aCustomer"), CustomerInfo)
то вылетает "Object reference not set to an instance of an object."

Переменные простого типа передаются нормально.
Re: как хранить экземпляр моего класса в Session
От: TK Лес кывт.рф
Дата: 27.01.04 21:18
Оценка: 3 (1)
Hello, "pavelsha"
> каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
>

Очень желательно, что-бы класс был сериализируемым.
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: как хранить экземпляр моего класса в Session
От: Воронков Василий Россия  
Дата: 27.01.04 21:31
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "pavelsha"

>> каким должен быть класс чтобы его экземпляры можно было сохранять в Session?
>>

TK>Очень желательно, что-бы класс был сериализируемым.


Ты ничего не путаешь?
... << RSDN@Home 1.1.3 beta 1 >>
Re[3]: как хранить экземпляр моего класса в Session
От: mikа Stock#
Дата: 27.01.04 21:59
Оценка: 15 (1)
Здравствуйте, Воронков Василий, Вы писали:

TK>>Очень желательно, что-бы класс был сериализируемым.


ВВ>Ты ничего не путаешь?


Это наверное для того, если сессия хранится в персистентном хранилище.
Re: как хранить экземпляр моего класса в Session
От: Stewe  
Дата: 28.01.04 13:45
Оценка:
Здравствуйте, 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
От: Gollum Россия  
Дата: 28.01.04 13:47
Оценка:
Здравствуйте, Stewe, Вы писали:

S>А не удобнее ли хранить объекты в коллекции с ключом SessionID?


Нет
Сегодня я прощаюсь — послезавтра я опять буду здесь
Eugene Agafonov on the .NET

Re[2]: как хранить экземпляр моего класса в Session
От: pavelsha Россия http://www.pavelsha.pp.ru
Дата: 28.01.04 16:01
Оценка:
Здравствуйте, 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?

А можно кратко об преимуществах такого способа? Где можно посмотреть примеры и почитать о нем?
Re: как хранить экземпляр моего класса в Session
От: pavelsha Россия http://www.pavelsha.pp.ru
Дата: 28.01.04 16:18
Оценка:
Дополню свой вопрос.

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
От: mikа Stock#
Дата: 28.01.04 21:15
Оценка:
Здравствуйте, pavelsha, Вы писали:

P>Возникает вопрос, что делать чтобы сессия не слетала? В одном из ответов упоминали хранилище. Можно об этом варианте кратко?


настрой в конфиге в секции <sessionState> аттрибут StateServer или SqlServer.
Re[3]: как хранить экземпляр моего класса в Session
От: Stewe  
Дата: 29.01.04 06:45
Оценка:
Здравствуйте, 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
От: Gollum Россия  
Дата: 29.01.04 06:51
Оценка:
Здравствуйте, Stewe, Вы писали:

S>Не знаю насчет преимуществ,


Хорошее начало

S>но основная идея такая: хранить объекты не в сессии, а специально созданной для этого коллекции (например Hashtable)


А где хранить коллекцию?

S>, где ключом будет свойство Session.SessionID, а значением — объект своего типа.


А если мне надо два объекта? Я-то вообще думал что идея — хранить в Session по айди сессии свою коллекцию, а там по своим ключам — свои объекты. Но мне непонятно, зачем так сложно?

S>По завершении сессии эти объекты можно удалять в обработчике Session_End.


Ну, в большинстве случаев GC спраится сам. Наверное в специфических ситуациях такой способ себя оправдывает.
Мне звонили с открытия пленума — я сказал им, что я не приду
Eugene Agafonov on the .NET

Re[5]: как хранить экземпляр моего класса в Session
От: Stewe  
Дата: 29.01.04 07:08
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, Stewe, Вы писали:


S>>Не знаю насчет преимуществ,


G>Хорошее начало


S>>но основная идея такая: хранить объекты не в сессии, а специально созданной для этого коллекции (например Hashtable)


G>А где хранить коллекцию?



S>>, где ключом будет свойство Session.SessionID, а значением — объект своего типа.


G>А если мне надо два объекта? Я-то вообще думал что идея — хранить в Session по айди сессии свою коллекцию, а там по своим ключам — свои объекты. Но мне непонятно, зачем так сложно?


S>>По завершении сессии эти объекты можно удалять в обработчике Session_End.


G>Ну, в большинстве случаев GC спраится сам. Наверное в специфических ситуациях такой способ себя оправдывает.


Я так понимаю, что нужно сохранять какой-то свой объект(объекты) для каждого сеанса, поэтому в классе Global можно создать, например, хеш-таблицу, а в нее добавлять все что угодно. Если своих объектов несколько, написать свой класс, в котором объединено все что нужно будет сохранять, и добавлять(изменять) объект этого класса.
Возможно, если планируется большая нагрузка на приложение, такой вариант будет слишком ресурсоемким, поэтому я ничего не могу сказать о преимуществах.
Re[6]: как хранить экземпляр моего класса в Session
От: Gollum Россия  
Дата: 29.01.04 07:11
Оценка:
Здравствуйте, Stewe, Вы писали:

S>Я так понимаю, что нужно сохранять какой-то свой объект(объекты) для каждого сеанса, поэтому в классе Global можно создать, например, хеш-таблицу,


То есть, статическую? Я чего-то не понимаю — она будет одна на приложение тогда.

S>а в нее добавлять все что угодно. Если своих объектов несколько, написать свой класс, в котором объединено все что нужно будет сохранять, и добавлять(изменять) объект этого класса.

S>Возможно, если планируется большая нагрузка на приложение, такой вариант будет слишком ресурсоемким, поэтому я ничего не могу сказать о преимуществах.

Объясни, зачем писать свою реализацию Session?
И начальник заставы поймет меня, и беспечный рыбак простит
Eugene Agafonov on the .NET

Re[7]: как хранить экземпляр моего класса в Session
От: Stewe  
Дата: 29.01.04 07:21
Оценка:
Здравствуйте, Gollum, Вы писали:

G>Здравствуйте, Stewe, Вы писали:


S>>Я так понимаю, что нужно сохранять какой-то свой объект(объекты) для каждого сеанса, поэтому в классе Global можно создать, например, хеш-таблицу,


G>То есть, статическую? Я чего-то не понимаю — она будет одна на приложение тогда.

Вот именно одна. В её элементах ключом будет SessioID, а значением объект (набор объектов), которые мы хотим хранить в течении времени сессии.


S>>а в нее добавлять все что угодно. Если своих объектов несколько, написать свой класс, в котором объединено все что нужно будет сохранять, и добавлять(изменять) объект этого класса.

S>>Возможно, если планируется большая нагрузка на приложение, такой вариант будет слишком ресурсоемким, поэтому я ничего не могу сказать о преимуществах.

G>Объясни, зачем писать свою реализацию Session?

Так ведь вопрос был о невозможности хранения объектов своего типа в Session.
Re[8]: как хранить экземпляр моего класса в Session
От: Gollum Россия  
Дата: 29.01.04 07:25
Оценка: +1
Здравствуйте, Stewe, Вы писали:

G>>Объясни, зачем писать свою реализацию Session?

S>Так ведь вопрос был о невозможности хранения объектов своего типа в Session.

Теперь понял. Хранить можно — тут видимо какие-то глюки, может действительно связанные с попыткой хранить сессию в SQL или stateserver.
Но я думаю, что здесь все более банально — либо куки не подцепляются с session id, либо еще что-то в этом же духе.
В лучших книгах всегда нет имен, и в лучших картинах — лиц
Eugene Agafonov on the .NET

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.