Управление тайм-аутами сеансов в ASP.NET - PullRequest
4 голосов
/ 17 февраля 2010

У меня есть веб-приложение ASP.NET 2.0, взаимодействующее с несколькими веб-службами ASP.NET 2.0. Оба используют сеансы ASP.NET для сохранения данных сеанса.

Чтобы предупредить пользователя о тайм-аутах сеанса приложения, я использую модифицированную версию Контроль времени ожидания Трэвиса Коллинза , чтобы показать ModalPopupExtender под названием «Ваш сеанс скоро истечет» и кнопки «Оставаться в системе» и «Выход». При нажатии «Оставаться в системе» выполняется обратный вызов пустого метода, который сбрасывает таймер сеанса (я полагаю, потому что каждый запрос HttpRequest вызывает ResetItemTimeout ).

Чтобы предотвратить тайм-аут сеанса в службах перед тем, что в приложении, я установил их время ожидания более продолжительным и планировал вызывать для них пустой метод всякий раз, когда таймер сеанса сбрасывается в приложении. Однако для сбрасываемого таймера Событие состояния сеанса отсутствует.

Нужно ли переопределять ResetItemTimeout ? Как мне это сделать? Или есть другой способ достижения моей цели (например, поддерживать сеанс службы, пока служба приложения активна)? Я подумываю о расширении контроля времени ожидания для отправки пульса через приложение (например, идея Тима Макки ).

Ответы [ 3 ]

0 голосов
/ 17 февраля 2010

Если вы собираетесь более или менее автоматически увеличивать время ожидания, почему бы просто не установить его слишком высоким для начала? ПОЦЕЛУЙ. и избавьте себя от необходимости писать код там, где вам это не нужно.

0 голосов
/ 19 февраля 2010

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

Я думаю, случай по умолчаниюдаже если сеанс начинается каждый раз, когда выполняется вызов веб-службы (вызовы веб-службы не сохраняют файлы cookie, необходимые для состояния сеанса), поэтому он ничего не сохраняет между вызовами.Но я не проверял это сейчас.Есть несколько способов сделать звонок, и я думаю, что некоторые из них хранят куки, а некоторые нет.

Но в любом случае: В вашем сценарии, действительно, нет причин использовать сессию в веб-сервисах:Для веб-сервисов существует только один клиент (веб-приложение), поэтому вы также можете использовать состояние приложения, если вам нужно кэшировать данные или что-то в этом роде.

0 голосов
/ 17 февраля 2010

Я не уверен, что следую. Вы говорите, что вызов пустого метода в веб-сервисе не сбрасывает таймер сеанса?

Кроме того, это похоже на большие накладные расходы. Почему бы не настроить веб-приложение и веб-службы на использование одних и тех же сеансовых файлов cookie?

...