2010-07-08 2 views
0

У меня есть приложение ASP.NET, работающее на двух серверах с балансировкой нагрузки. Все работает нормально, за исключением одной группы клиентов. Все эти клиенты приходят из одной компании. В случайном порядке генерируется необработанная ошибка NullReferenceException. Это случается случайным образом в случайных местах. Кажется, что сеанс полностью исчез. поскольку это происходит только для определенной группы пользователей, я должен предположить, что это имеет какое-то отношение к их среде. Я видел пользователей, входящих в IE6, IE7, IE8 и FF, и это ошибка во всех случаях.Сессия ASP.NET потеряна, но только для одного конкретного пользователя

Я не уверен на 100%, как устранить эту проблему. У кого-нибудь есть идеи?

EDIT: Session установлен в положение «InProc»

<sessionState mode="InProc" cookieless="false" timeout="20" /> 
+0

Какой механизм балансировки нагрузки вы используете? –

ответ

1

Я связался с пользователем, имевшим знамя. Я попросил его открыть браузер и перейти на whatsmyip.org и сказать мне, что он говорит, это его IP-адрес. Затем я попросил его несколько раз обновить экран. Ну, разве ты не знаешь, IP-адрес изменился. Он продолжал переключение между двумя разными IP-адресами. Это был не IP-адрес его машины, а два разных прокси. Каждый запрос мог бы возникнуть по одному или другому.

Наш балансировочный балансир (что-то называемый Zeus - я не являюсь сетевым парнем) был настроен на установление схожести сессии (a.k.a. липкие соединения) с использованием IP-адресов. Мы изменили настройки так, чтобы балансировщик нагрузки сбросил файл cookie и использовал его для поддержания сеанса, и теперь все работает правильно.

0

Если вы используете SQL для хранения состояния сеанса, убедитесь, что все серверы в ферме, глядя на той же базе данных SQL - Я были пойманы этим раньше, и это заняло довольно много времени, чтобы разобраться в этом!

Edit: На самом деле вы, возможно, потребуется установить его в StateServer, как вы работаете в веб-ферме. См. Об Session-State Modes от MSDN.

+0

Сессия настроена на InProc (вопрос был изменен), спасибо. – HitLikeAHammer

0

Если ваша балансировка нагрузки основана на управлении каждым ударом на сервере с наименьшим уровнем занятости, тогда InProc не будет работать. вам нужно будет использовать режимы StateServer или SQLServer.

Представьте, что первый клик от клиента направлен на сервер A, который запускает новый сеанс на сервере A. Второй хит от того же клиента может перейти на сервер B, предоставив куки-файл сеанса с сервера A, какой сервер B Не признаю.

Если у вас есть «липкая» (или клиентская близость) балансировка нагрузки, где первый клик распределяется на наименее занятый сервер, но затем последующие удары из того же сеанса направлены на тот же сервер, тогда InProc все равно должен Работа.

+0

Мы используем липкие соединения. Тот факт, что только для сертифицирующей группы пользователей заставляет меня думать, что это что-то в их сети. Возможно, IP-адрес меняется на запрос или что-то в этом роде. – HitLikeAHammer

1

сеанс InProc не используется между серверами, поэтому кажется, что эта группа пользователей перемещается с одного сервера на другой, а другие нет. Возможно, ваш балансировщик нагрузки пытается достичь липких сеансов, используя что-то вроде IP-адреса или что-то еще, и эта организация блокирует эту информацию.

+0

Нечто подобное может быть проблемой. Предполагая, что есть, что я могу сделать со стороны приложения, чтобы исправить это? – HitLikeAHammer

+0

Проще всего было бы настроить один из других режимов состояния сеанса (оба могут быть разделены между серверами). Если это невозможно из-за ограничений на то, что вы можете делать на серверах/базе данных, вам придется либо хранить данные пользователя, а затем извлекать его самостоятельно на основе какого-то ключа, который передается в скрытой форме поля или URL-адреса - или вы можете попытаться, возможно, эти страницы быть полностью безгражданными. Любой из этих вариантов, вероятно, потребует больших усилий, хотя, если вы уже используете сеанс во многих местах - плюс дополнительные проблемы безопасности и т. Д. – FinnNk

Смежные вопросы