У меня действительно странная проблема, которую я надеюсь, что кто-то может пролить свет. У нас есть форма, которая вызывает у нас проблемы, а благодаря отладке и т. Д. Поняла, что это связано с тем, что переменная сеанса «случайно» исчезает..Net странная ошибка сессии - переменные исчезают из-за нового сеанса во время обратной передачи
Мы знаем, что это не код, делающий это - поэтому, чтобы устранить это, мы выбили очень простую форму с буквальным и одним нажатием кнопки. Во время загрузки страницы, если это не обратная передача, она устанавливает переменную сеанса, например «myvalue» с датой и временем. Когда пользователь нажимает кнопку, он проверяет сеанс для этой переменной, а затем отображает, был ли он там или нет. Затем он откажется от сеанса, так что следующие прогоны будут очищены (он не делает этого в описанной выше форме - это просто для тестирования).
Однако, в 90 раз из 100 (для аргументов), он будет действовать так, как вы ожидали. Тем не менее, для тех 10, которые распределены по критерию случайным образом - так что никакие конкретные промежутки времени или повторения тестов не сообщаются, он сообщит, что переменная исчезла.
Теперь я подтвердил, что это на 100% из-за перезапуска сеанса с полностью случайными интервалами. При загрузке первой страницы в нем указано, что IsNewSession истинно - это то, что я ожидаю, поскольку это первый раз. В postback он установлен в IsNewSession = false - снова то, что я ожидаю, и для загрузки моей переменной в место.
Однако, когда все идет не так, первоначальный запрос IsNewSession является истинным, но при обратной передаче он снова устанавливается в true - без переменных в хранилище.
В среде используется база данных AspState (SQL Server). Нет ничего очевидного - и что еще хуже - случайный характер проблемы. Тайм-ауты практически устранены. Единственное различие заключается в том, что это происходит в среде LOAD BALANCED на четырех серверах. Мы проверили идентификатор приложения в IIS (7.5), и все они одинаковы - одни и те же ключи машины и т. Д.
Кто-нибудь знает, что здесь происходит? Это .Net 2 btw, что может быть проблемой - я надеюсь, что это известная проблема с управлением версиями этой версии, но пока я не могу найти ничего, что может указывать на причину.
Проблема не появляется при использовании InProc на одном сервере. Кажется, это происходит только с использованием Sql Server.
Заранее спасибо - очень признателен за любую помощь,
Приветствия, Тони
Update:
Мы думаем, что мы разработали эту проблему. Хранимая процедура, DeleteExpiredSessions, запускается каждую минуту - это адаптированная версия microsoft, рекомендуемая в их статье базы знаний http://support.microsoft.com/kb/973849. Это продолжалось каждую минуту, поэтому мы воспроизвели это в тесте (который также сбалансирован по нагрузке) и настроили задание на один и тот же интервал.
То же самое произошло в тесте. Отключив это в прямом эфире, проблема исчезла.
Очевидно, что это либо блокировка (которую мы не видим в журналах или мониторинг активности), либо удаление сеансов, которые все еще действительны.
Кто-нибудь когда-либо видел это раньше? Моя нынешняя теория заключается в том, что сеанс инициализируется при каждом вызове сервера, на который вы приземляетесь, но затем при перенаправлении обратной связи на другой сервер по какой-либо причине сеанс считается «недействительным» и перерабатывается.