классическая ошибка asp в global.asa: требуется объект: 'Session' - PullRequest
1 голос
/ 16 марта 2011

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

Session.Timeout = 30

вызывает следующую ошибку: Требуемый объект: «Сессия»

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

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

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

0 голосов
/ 24 марта 2011

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

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

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

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

...