Проблема сессии asp.net: переменная сбрасывается после перенаправления - PullRequest
0 голосов
/ 10 ноября 2010

Просто "снова использовал сессию", как обычно ... но столкнулся со странной ситуацией..net 3.5

  1. Вставлен объект в переменную сеанса.
  2. Только в следующей строке - успешно извлечен.
  3. Перенаправление, получение - переменная является значением по умолчанию, но конструктор объекта не был вызван.

Я не буду описывать, как я трачу несколько часов на отладку любой операции, которая может сбросить переменную... потому что после этих часов я просто изменил режим StateServer на InProc ... и ЭТО ПРИШЕЛ НА ЖИЗНЬ)

Почему?Раньше я видел исключение, если я пытаюсь вставить что-то не сериализуемое и т. Д. В сервер состояний - но я вставляю и извлекаю ... Также в трассировке я видел объекты того же типа в сеансе, но с другими идентификаторами.И наконец - я использую старый, проверенный код (в случае перенаправления и сохранения сеанса или получения) НО с новым типом объекта.

Что происходит?)

РЕДАКТИРОВАНИЕ:

Проверен трафик брандмауэра на порте сервера состояний - asp не отправляет туда ничего при обработке запроса страницы.Вот почему я могу получить переменную на следующей строке.Но почему он записывает объект по умолчанию в state-server позже?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2010

Какова среда вашей машины?В разделе модели вашего пула приложений, сколько рабочих процессов вы используете?

Если вы используете состояние сеанса inProc, но ваша модель процесса пула приложений использует более одного рабочего процесса, у вас возникнет такая проблема.

Имейте в виду, что ваши настройки пула приложений на вашем компьютере разработчика, скорее всего, будут отличаться от вашего рабочего компьютера.Таким образом, изменение между состоянием сеанса inproc и службой состояния сеанса имеет огромное значение.

0 голосов
/ 12 ноября 2010

В нижнем классе в иерархии сериализованных объектов был основан класс, который не был помечен как Сериализуемый.Кажется, что asp не может вызвать такое исключение, если не поддающийся сериализации объект вложен в подклассы.Так глупо (

0 голосов
/ 10 ноября 2010

Response.Redirect может вызвать это поведение; после того, как редирект вызван, генерируется исключение прерывания потока, которое может помешать установке переменной сеанса.

Эту проблему можно решить с помощью перегрузки

Response.Redirect("~/default.aspx", false);

Этот вызов не прерывает поток, и, таким образом, переменная сеанса будет успешно установлена.

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