Программная диагностика потери сеанса ASP.Net из-за перезапуска приложения?

У нас есть приложение ASP.Net 2.0 (VS2005), которое отлично работает локально, но иногда теряет состояние сеанса при развертывании на удаленном сервере.

Я подозреваю возможную проблему с тем, что IIS перерабатывает приложение и тем самым сбрасывает состояние сеанса пользователей. Однако сервер находится удаленно и не находится под нашим контролем... поэтому мы не можем просто запустить IIS Admin и проверить настройки приложения. Другая возможная причина, конечно, заключается в том, что клиенты по какой-то причине отклоняют файл cookie сеанса ASP.Net.

(Мы в значительной степени исключили ошибку в нашем коде, потому что это простое приложение, и оно никогда не пытается ничего удалить из объекта Session, но, конечно... это знаменитые последние слова, а?)

Как бы вы диагностировали это программно?

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

Я уверен, что это обычная проблема для разработчиков ASP.Net.


person John Rose    schedule 30.12.2008    source источник


Ответы (4)


Вот несколько ссылок, которые могут помочь в устранении неполадок, если вы можете изменить некоторые настройки:

Рабочий журнал Обработка событий повторного использования в IIS 6.0 (IIS 6.0)

Журнал событий завершения работы приложения ASP.NET

person JB King    schedule 30.12.2008

Добавьте некоторый код ведения журнала в метод global.asax Application_Start, и вы сможете увидеть, когда/если ваша потеря вызвана перезапуском приложения (или, по крайней мере, вы увидите, когда сервер запускается, если вы знаете, что сеанс был потеряли при этом, вы знаете своего виновника).

Обходным путем может быть использование состояния сеанса вне proc (вероятно, должно быть основано на SQL, если у вас нет контроля над сервером). Требуется немного дополнительной работы с вашим кодом, потому что все, что вы храните в сеансе, должно быть сериализуемым, но решает проблему перезапуска приложения, вызывающего потерю сеанса.

person Chris Shaffer    schedule 30.12.2008

IIS, настроенный для более чем одного рабочего потока (веб-сада) в пуле приложений, может привести к потере состояния сеанса.

person Gordon Bell    schedule 30.12.2008

Я обнаружил сценарий, в котором сеанс потерян. На странице asp.net для поля текстового поля сумма содержит недопустимые символы, после чего следует поиск переменной сеанса для других целей. После публикации недопустимого синтаксического анализа числа через Convert.ToInt32 или double вызывает исключение первого шанса, но ошибка не отображается в этой строке. Вместо этого сеанс, являющийся нулевым из-за необработанного исключения, показывает ошибку при извлечении сеанса, тем самым вводя в заблуждение отладку...

СОВЕТ: проверьте свою систему, чтобы она не сработала - РАЗРУШИТЕЛЬНО.. введите достаточно мусора в несвязанных сценариях, вы также сможете воспроизвести эту машину на своей локальной кодовой базе...:)

Надеюсь, это поможет, hydtechie

person HydPhani    schedule 22.03.2013