У меня включен мониторинг работоспособности в производственной системе (asp.net webforms .net 4), и я вижу, что мне отправляется множество ошибок, указывающих, что переменная сеанса была потеряна.
(Я пытаюсь присоединить что-то из состояния сеанса к контексту данных структуры сущности и получаю ошибку «Значение не может быть пустым, сущность имени параметра»).Таким образом, переменная сеанса теперь содержит нуль, а не объект.
Интересно, что одно и то же приложение развернуто на двух отдельных серверах - один DMZ-сервер для внешних пользователей и один внутренний сервер для внутренних пользователей.Оба этих приложения на двух разных серверах, похоже, имеют одну и ту же проблему.
Мониторинг работоспособности также отслеживает события времени жизни, и из этого я вижу, что у нас нет чего-то вроде рециркуляции IIS, изменений конфигурации, изменений в binпапки, перекомпиляции и т.д., происходящие.
Я прочитал эту страницу: http://weblogs.asp.net/bleroy/archive/2004/08/03/Don_2700_t-redirect-after-setting-a-Session-variable-_2800_or-do-it-right_2900_.aspx
Я могу подтвердить, что это не проблема Response.Redirect, потому что это не происходит - это онлайн-приложениеform - он переводит объект в состояние сеанса на page_load, и появляется многовариантность - когда нажимается «next», объект выходит из состояния сеанса, присоединяется к контексту данных, вносятся изменения из веб-формы и обновляется текст данных.Так что отклика response.redirect не происходит.
Я также могу подтвердить, что подробности в «Обновлении 1» и «Обновлении 2» по этой ссылке мне не нужны - в пуле приложений работает только 1 рабочий процессимя сервера или веб-адрес не содержат символов подчеркивания.
Я также рассмотрел возможность возникновения тайм-аутов сеанса, но они должны обрабатываться другим кодом, который выполняется для обнаружения тайм-аутов сеанса (см .: http://blogs.msdn.com/b/nikhiln/archive/2007/06/21/detecting-session-timeout-in-asp-net-2-0-web-applications.aspx), который я проверял снова и снова - Часть проблемы в том, что я просто не могу воспроизвести эту ошибку самостоятельно.
Итак: -
- Нет тайм-аутов
- Не переработка рабочего процесса IIS или какие-либо другиедругая вещь, которая генерировала бы событие жизненного цикла мониторинга работоспособности
- не использовать response.redirect
- не получена веб-ферма / несколько рабочих процессов
Затем я нашел эту ветку: http://bytes.com/topic/asp-net/answers/490975-disappearing-sessionsгде MVP сказал следующее:
Каждый раз, когда приложение IIS перезапускается, все сеансы также перезапускаются.Так что да, это обычно происходит во время перекомпиляции и некоторых основных необработанных исключений на уровне приложений.
Но, к сожалению, не уточнил, к какому типу могут привести «основные необработанные исключения на уровне приложений»к потере сеанса - это совершенно новая система, и у нас все еще есть необработанные исключения, над которыми мы работаем над исправлением - так о каких исключениях мы говорим здесь?Может ли исключение приложения в сеансе одного человека действительно удалить все сеансы, удерживаемые приложением?
Этот поток также затрагивает его: http://bytes.com/topic/asp-net/answers/490975-disappearing-sessions
Единственное, что я видел подобноеэто когда во время выполнения приложения ASP.NET возникает ошибка, приводящая к перезапуску приложения.Вы тоже получаете события Application_OnStart?
Итак, я предполагаю, что если бы у меня была ошибка времени выполнения, которая вызвала перезапуск приложения, это также вызвало бы событие жизненного цикла мониторинга работоспособности, верно?И я просто не получаю ничего из этого ...
Было бы намного проще, если бы я мог на самом деле повторить это, но я просто не могу!
В любом случае, извините за длинный вопрос, просто надеюсь, у кого-нибудь есть идеи.
С уважением