Сеанс с состоянием с nhibernate и asp.net - PullRequest
0 голосов
/ 15 июня 2011

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

Теперь последовательность событий выглядит следующим образом:

  1. пользователь заполняет форму.
  2. он отправляет форму.
  3. создается сессионная фабрика nhibernate, а через объект клиента она сохраняется в базе данных.
  4. база данных фиксирует объект сессии с помощью собственного генератора для nhibernate
  5. , но до этого произошла ошибкаответ от сервера доходит до клиента.соединение с клиентом разрывается.
  6. клиент получает сообщение об ошибке "Не найдена страница" или ошибка времени ожидания запроса.и имеет дилемму, что он еще не зарегистрирован.
  7. поэтому он снова нажимает кнопку обновления.и тот же набор данных (хотя и зафиксированный в базе данных) был отправлен на сервер для фиксации базы данных.
  8. сервер видит данные и снова регистрирует того же клиента с другим идентификатором.
  9. так что проблема идет как.теперь одна и та же запись клиента была продублирована два раза, потому что соединение было разорвано.

Теперь кто-нибудь может сказать мне, как поступить в этом сценарии.Так что даже если клиент отправляет запрос, он просто распознает только одну запись и отправляет ее, даже если ответ обрезан и он нажимает кнопку обновления?

1 Ответ

0 голосов
/ 15 июня 2011

Мысль:

1) Вы не хотите создавать NHibernate SessionFactory при каждом запросе. Это должно быть создано один раз и затем использовано всеми будущими запросами. Это тяжелая операция. Для каждого запроса необходимо создавать только сеансы.

2) Управляйте транзакцией высокоуровневым методом - чтобы снизить вероятность того, что что-то пойдет не так, ПОСЛЕ того, как вы совершили транзакцию, но ДО того, как клиент получит ответ.

3) Предотвращение повторной отправки метода «Обновить», если функция submit возвращает другую страницу с информацией. Эта страница не должна отправлять ничего.

4) Защита от повторной отправки на стороне сервера, проверяя отправку по ранее представленным учетным данным. Сообщите клиенту, если он ранее зарегистрировался, и предоставьте ему средства для доступа к сохраненным данным (например, восстановление пароля).

так, например, если ваши пользователи набирают ключи по адресу электронной почты, в событии загрузки страницы выполните следующие действия:

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