Потерять ASP.NET Session для одного запроса, а затем восстановить его при следующем - PullRequest
0 голосов
/ 24 апреля 2009

Я вижу очень странную проблему на одной из моих производственных коробок. У нас есть приложение, размещенное в IIS 6 на одной машине с веб-сервером apache перед ним. Мое приложение использует ASP.NET членство для проверки подлинности и зависит от состояния сеанса. Сейчас я вижу проблему, когда некоторые запросы к серверу при попытке доступа к любым переменным сеанса выдадут нулевое исключение, но если запрос будет повторен, страница не найдет никаких исключений и будет работать правильно.

Я полагаю, что это как-то связано с тем, что cookie-файл Session ID либо поврежден, либо потерян по запросу, но я понятия не имею, что может вызвать это. Я полагаю, что причина в том, что ASP.NET не видит cookie и создает новый сеанс, что объясняет, почему переменные имеют значение null. Когда он получает исключение, он не может записать новый файл cookie SessionID обратно клиенту, поэтому клиент по-прежнему поддерживает исходный SessionID. Затем при отправке следующего запроса используется исходный файл cookie SessionID, который теперь ASP.NET находит и может получить состояние сеанса. Это чистое предположение, но, похоже, соответствует симптомам.

Кроме того, на этом сайте не используются никакие другие файлы cookie, кроме тех, которые требуются для членства в ASP.NET и для сеанса ASP.NET, поэтому у меня достаточно ограничений на использование файлов cookie для IE. Сайт работает нормально уже около 8 месяцев, и эта проблема только недавно появилась. Я попытался сбросить IIS и фактически перезагрузить компьютер, но, похоже, ничто не помогло.

Обновление:

Вот некоторые уточнения, которые были запрошены.

1.) Наш сервер Apache - единственное, что доступно в Интернете. Все запросы происходят через HTTPS к этой коробке. Затем окно Apache направляет все запросы, прошедшие через HTTP, на наш сервер приложений. Это делается из соображений безопасности. Мы посмотрели, возможно, проблема была в Apache, но в журналах Apache, похоже, нет ошибок.

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

1 Ответ

0 голосов
/ 29 апреля 2009

Мы нашли корень проблемы. Похоже, что мета-база IIS была повреждена на нашем сервере приложений. Лучший способ решить эту проблему - выполнить чистую установку IIS, но из-за деловых ограничений это не вариант для нас. Таким образом, другое решение - просто создать новый пул приложений для запуска приложения. По мнению некоторых людей с большим опытом IIS, чем я, это решит проблему в краткосрочной перспективе, но вполне вероятно, что то же самое произойдет с этим пулом приложений. Поэтому мы должны создать новые пулы приложений, если это снова произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...