2013-09-18 1 views
8

У меня действительно странная проблема, которую я надеюсь, что кто-то может пролить свет. У нас есть форма, которая вызывает у нас проблемы, а благодаря отладке и т. Д. Поняла, что это связано с тем, что переменная сеанса «случайно» исчезает..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. Это продолжалось каждую минуту, поэтому мы воспроизвели это в тесте (который также сбалансирован по нагрузке) и настроили задание на один и тот же интервал.

То же самое произошло в тесте. Отключив это в прямом эфире, проблема исчезла.

Очевидно, что это либо блокировка (которую мы не видим в журналах или мониторинг активности), либо удаление сеансов, которые все еще действительны.

Кто-нибудь когда-либо видел это раньше? Моя нынешняя теория заключается в том, что сеанс инициализируется при каждом вызове сервера, на который вы приземляетесь, но затем при перенаправлении обратной связи на другой сервер по какой-либо причине сеанс считается «недействительным» и перерабатывается.

ответ

0

Просто дикая догадка, но проверьте системные часы на своих серверах и убедитесь, что они синхронизированы и находятся в том же часовом поясе (включая настройки DST).

1

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