У меня производственная проблема с состоянием сеанса In-Proc.
Наше приложение основано на фреймворке MVC 3 .NET и интегрировано в наш сайт под управлением Sitecore CMS.
Наши пользователи сталкиваются с проблемой "Object reference not set to an instance of an object" случайным образом во всем потоке приложения.
После тщательного протоколирования и трассировки мы пришли к выводу, что это происходит, когда объект сессии возвращает null.
Вот некоторые подробности о том, что мы обнаружили и что нам известно.
Примечание: Мы должны использовать состояние сессии In-Proc из-за нашей Sitecore CMS. Поэтому изменение дизайна - не вариант.
У меня есть теория, что это может быть связано с блокировкой сеанса или его повреждением при одновременных попытках доступа.
Несколько мест, где мы часто видим возникновение этой проблемы в нашем приложении, это когда пользователи перенаправляются javascript (windows.location).
И в местах, где выполняются асинхронные вызовы ajax.
Мы ломали голову над этим некоторое время, мне интересно, есть ли у кого-нибудь идеи или теории, в чем может быть проблема?
Спасибо
Добавлено примечание:
@Mystere && @H27Studio, Я также обнаружил кое-что, связанное с sessionID или проблемами сброса сессии. В некоторых случаях мы обнаружили, что при перенаправлении страницы происходит два дублирующих вызова метода GETS, при этом в первом вызове отсутствует sessionID и происходит случайное перенаправление на один из серверов (Это происходит потому, что серверная постоянная сессия от балансировщика нагрузки основана на IP клиента, sessionID и другой информации заголовка для создания уникальной сессии, чтобы держать клиента на одном сервере). Это происходит каждый раз во время потока, когда наша страница перенаправления использует window.location.
Это вызовет проблему "Object reference not set..." для клиента, если плохой вызов без sessionID попадет на тот же сервер. (Возможно, это происходит потому, что первый неудачный вызов с отсутствием sessionID заставляет приложение создавать новую сессию, которая переопределяет объект исходной сессии) Поэтому даже при втором вызове, когда в приложение передается правильный sessionID, мы обнаружим, что объект сессии содержит null.
Таким образом, я полагаю, что существует проблема с дублирующим вызовом, который очищает объект сессии, но не уверен, почему или что вызывает это с самого начала.
У кого-нибудь есть подсказки по этому поводу? Thanks
Update: Мы планируем предпринять следующие шаги в надежде решить эту проблему.
Эффект от изменений будет опубликован, как только мы внедрим его в производство.
Спасибо за все комментарии.