Динамическое добавление элементов управления в ASP.NET - представление состояния не сохраняется через 20 минут - PullRequest
1 голос
/ 03 декабря 2010

У нас есть форма ASP.net [.NET 3.5 на IIS 6], которая динамически загружает элементы управления. Мы можем сохранить значения в viewstate , пока обратная передача не произойдет в течение 20 минут . База данных также обновляется должным образом. Все работает как положено.

Однако, если пользователю требуется более 20 минут для заполнения формы, элементы управления больше не сохраняют свои значения во время обратной передачи. Значения сеанса не повреждены, аутентификация пользователя также не повреждена. Мы попробовали несколько вещей

1) Добавлены машинные ключи в файлы web.config - у нас есть балансировка нагрузки на 2 веб-сервера с помощью балансировщика нагрузки Windows

2) Мы подтвердили, что пользователь перенаправлен на один и тот же сервер - потому что сеансы привязаны

3) Увеличено время ожидания сеанса до 60 минут в IIS 6.0

4) Увеличено время ожидания для пула соединений до 60 минут

5) Изменено время ожидания билета для проверки подлинности формы до 60 минут

Буду признателен за любую помощь.

-Спасибо

Ответы [ 3 ]

4 голосов
/ 03 декабря 2010

20 минут - это время ожидания по умолчанию для повторного использования пула приложений. Запустите диспетчер IIS на сервере, перейдите в свойства пула приложений и снимите флажок «Перезапускать рабочие процессы (в минутах)» или установите значение 60.

1 голос
/ 03 декабря 2010

«липкие» сессии не означают «всегда идти на один и тот же сервер».Это всего лишь предложение.Конечно, сильный, но все еще только предложение.Балансировщик нагрузки работает, храня в памяти кеш клиентов и их сервер назначения.Эта память ограничена и собирается мусором на регулярной основе.Это означает, что вы вполне можете перебрасываться между серверами в зависимости от времени между запросами.

Если вы используете данные сеанса в памяти с компьютерами с балансировкой нагрузки, то вам необходимо либо 1. прекратить использование сеанса, либо изменитьрезервное хранилище должно быть сервером состояния сеанса или сервером sql.Это единственный способ убедиться, что данные сеанса действительно доступны на всех целевых серверах.

Как вы определили, что значения сеанса и пользователя по-прежнему не изменились?Вы просто догадываетесь, на каком сервере они собираются?

Чтобы полностью исключить балансировку нагрузки как виновника, отключите все машины, кроме одной.

0 голосов
/ 21 марта 2011

Проблема может быть в <sessionPageState historySize="9" /> конфигурации.Он контролирует, сколько «результатов обратной передачи» хранится в сеансе.Каждый постбэк записывает свой ViewState в конец очереди в сеансе ["__ VIEWSTATEQUEUE"].

...