Классическая ошибка ASP в Global.ASA: объект требуется: 'Session'

StackOverflow https://stackoverflow.com/questions/5321021

Вопрос

Код VB ASP на стороне сервера на машине Windows 2003, ASP.NET 2.0* Установлен. У нас есть странная проблема, когда пользователь впервые подключается к веб -сайту, Session_onstart в Global.asa Fires, но объект сеанса нулевой. Что -то простое, например:

Session.Timeout = 30

вызывает следующую ошибку: требуется объект: 'session'

Веб -сайт был «создан» на вкладке Home Directory IIS Manager, а сеансы включены на странице конфигурации для сайта.

В большинстве случаев объект сеанса существует, если пользователь обновляет страницу. Но это первое посещение уникального пользователя всегда вызывает ошибку.

Предложения? Код не имеет ошибки, так как он работал на старой системе Win2000.

Просто для повторения: Server Windows 2003, запустив IIS6, с установленным .NET 2.0. Веб -сайт работает как приложение, а не виртуальный каталог.

Это было полезно?

Решение

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

Сейчас я ищу способ, чтобы в пуле приложений были несколько работников, но для того, чтобы клиент оставался в рабочем процессе. Но это другая проблема, которую я исследую.

Другие советы

Довольно интересная проблема.

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

If Session("test") Is Nothing Then
    Response.Redirect("Whatever.asp")
End If

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top