Сохранять состояние сеанса в таблице БД - PullRequest
2 голосов
/ 01 апреля 2011

Использование ASP .Net C # 3.5, работающего на IIS 6 и бэкэнда SQL Server 2005.

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

Форма является интенсивной и требует много времени для пользователей и в соответствии с мандатом, который не изменится.

Я пытаюсь гарантировать, что пользователь не расстроится, если его сеанс по какой-либо причине будет прерван, гарантируя, что завершенные шаги будут восстановлены при возвращении в приложение.

Использование HTTPModule /HTTPHandler с именем FormStateKeeper (http://fsk.codeplex.com/) делает именно это для случаев, когда время аутентификации пользователя истекло.

Поскольку FormStateKeeper хорошо работает для тайм-аутов аутентификации, я попытался расширить / изменить его, создав провайдера хранения, который хранитсериализованное состояние формы в таблице БД в виде varbinary, а не в кеше времени выполнения, который используется по умолчанию в FormStateKeeper. Это похоже на работу, т. е. форма при десериализации и восстановлении в промежуточную страницу выглядит идеально и идентична той, которая хранится вкэш времени выполнения.

В любом случае, мои попытки использовать FormStateKeeper с использованием хранилища БД не увенчались успехом.

Я понимаю, что могу просто сериализовать форму, но мне хотелось бы получить представление состояния / элемент управлениятакже состояние, так как вся страница / приложение очень динамична со скрытыми / отключенными элементами управления / панелями, графикой индикации шага и т. д.

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

Информация, предложения и примеры будут высоко оценены.

Steve

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Я могу говорить по своему опыту, поскольку я работал на серьезных веб-сайтах ASP.NET/MVC (например, 5 миллионов уникальных посетителей и 11 миллионов посещений в месяц и т. Д.) ... Моя рекомендациячтобы не пытаться сохранить состояние фактических виджетов на странице, скорее сохраните запись данных пользователя в промежуточном хранилище (ваш пользовательский поставщик сеансов или любой другой) с достаточным количеством метаданных о состоянии пользователя в пределахпроцесс*).Например, если бы я кодировал длинное заявление о страховом покрытии (которое у меня есть):

Реальные данные: имя, телефон, пол, иждивенцы, дата создания, дата изменения, статус приложения = «в процессе»,и т. д. *

метаданные: последний выполненный шаг = 3 и т. д. *

Убедитесь, что метаданные устойчивы к версии приложения… например, если пользователь входит и выполняет 5 из 10 шагов1-й и 2-й день - приложение изменяется только на 4 шага, что происходит для пользователя-ретритера: ошибка (вас должны уволить, если вы ответите на это);эвристика завершенных данных (лучший вариант), статическое отображение старого на новое (ненадежно).С другой стороны, я всегда добивался большего успеха, когда пользователь может переходить в процессе до окончательного времени представления.

Мои два цента.

1 голос
/ 01 апреля 2011

ASP.Net имеет собственный встроенный в SQL Server диспетчер состояний сеанса , который вы можете легко настроить для своего приложения.

Если вы сохраните все переменные формы в сеансе (вы можете даже запустить процесс AJAX за кулисами, чтобы обновлять элементы сеанса каждую минуту или около того, чтобы отслеживать переменные формы по мере добавления.

Вот пара статей, которые помогут вам начать:

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