中国最大的 Интернет 开发资源网站及技术社区 ,
Реализация ASP
Настоящий сеанс ASP может хранить только данные сеанса в памяти. Чтобы сохранить данные сеанса в SQL Server, пользовательский объект Microsoft® Visual Basic® 6.0 COM записан для управления состоянием сеанса вместо использования собственного объекта сеанса. Этот объект COM будет создаваться в начале каждого веб -запроса и перезагрузить данные сеанса с SQL Server. Когда сценарий ASP будет закончен, этот объект будет прекращен, и состояние сеанса будет сохраняться обратно на SQL Server.
Основной целью объекта сеанса Visual Basic 6 Com является предоставление доступа к внутренним объектам информационного сервера Microsoft® Интернета. Объект сеанса Visual Basic 6.0 Com использует класс Mysession of SessionUtility Assembly для удержания состояния сеанса, а также класса SessionPersistence для загрузки и сохранения данных сеанса с помощью SQL Server. Занятия Mysession и SessionPersistence выявляются как COM -объекты с использованием утилиты Regasm.exe. Утилита Regasm.exe может зарегистрироваться и создать библиотеку типов для клиента COM для употребления классов фреймворков.
Информация о состоянии сеанса перезагружается во время строительства объекта. Конструктор (class_initialize) сначала извлечет сеанс cookie, время ожидания сеанса (SessionTimeout) и строку подключения к базе данных (SessionDsn) из объекта приложения и создаст экземпляр MySession класса для хранения данных сеанса. Затем конструктор попытается перезагрузить данные сеанса с SQL Server с данным cookie. Если SQL Server не имеет информации сеанса, или сеанс истек, будет выпущено новое cookie. Если SQL SEAR вернется с данными состояния сеанса, состояние сеанса будет храниться в объекте MySession.
private sub class_initialize ()
При ошибке goto errhandler:
const method_name as string = class_initialize
Установить mysessionPersistence = новый сеанс
Установить myObjectContext = getObjectContext ()
mysessionId = reateSessionId ()
mydsnstring = getConnectionDsn ()
mytimeout = getsessionTimeout ()
myisnewsession = false
Позвоните в initContents
Выход Sub
Errhandler:
err.raise err.number, method_name &: & err.source, err.description
Конец суб
Private Sub initContents ()
При ошибке goto errhandler:
const method_name as string = initContents
Если mysessionId = тогда
Установите MyContentSentity = новая Mysession
mysessionid = mysessionPersistence.GenerateKey
myisnewsession = true
еще
Установите MyContentSentity =
MySessionPersistence.LoadSession (mysessionId, mydsnstring, mytimeout)
конец, если
Выход Sub
Errhandler:
err.raise err.number, method_name &: & err.source, err.description
Конец суб
Когда экземпляр объекта выйдет из счета в скрипте, Destructor (class_terminate) выполнит. Деструктор сохранит данные сеанса, используя метод SessionPersistence.savesession (). Если это новая сессия, деструктор также отправит новый cookie обратно в браузер.
private sub class_terminate ()
При ошибке goto errhandler:
const method_name as string = class_terminate
вызовать SetDataForsessionId
Выход Sub
Errhandler:
err.raise err.number, method_name &: & err.source, err.description
Конец суб
Private Sub SetDataForsessionId ()
При ошибке goto errhandler:
const method_name as string = setDataForsessionId
Позвоните MySessionPersistence.SaveSession (MysessionId,
mydsnstring, mycontentsentity, myisnewsession)
Если MyisNewSession, то Call PrisesessionId (MySessionId)
установить mycontentsentity = ничего
Установить myObjectContext = ничего
установить mysessionPersistence = ничего
Выход Sub
Errhandler:
err.raise err.number, method_name &: & err.source, err.description
Конец суб
Вы можете загрузить исходный код проекта SessionUtility Project ASP.NET, менеджера с сеансами COM и демо -кода, нажав на ссылку в верхней части статьи.
демо -программа
Демо -программа предназначена для увеличения и отображения числа. Независимо от того, какая страница загружена, число будет продолжать увеличивать, поскольку значение номера хранится на SQL Server и используется между классическим ASP и ASP.NET.
Шаги по настройке демонстрационной программы
Создайте новую базу данных под названием SessionDemodb.
Создайте таблицу SessState (osql.exe –e -d sessiondemodb -i session.sql).
Создайте новый виртуальный каталог под названием Demo.
Выключите сеанс ASP на вкладке конфигурации ASP.
Скопируйте web.config, testpage.aspx, global.asa, testpage.asp и globalinclude.asp в виртуальный каталог.
Обновите настройку строки DSN в Global.asa и Web.Config. Настройка тайм -аута сеанса является необязательным. По умолчанию 20 минут.
Установите SessionUtility.dll в глобальный кэш сборки (gacutil /i sessionutility.dll).
разоблачить SessionUtility.dll как объект Com, используя regasm.exe (regasm.exe sessionutility.dll /tlb:sessionutility.tlb).
Скопируйте SessionManager.dll в локальный каталог и используйте regsvr32.exe, чтобы зарегистрировать его (regsvr32 sessionmanager.dll).
Предоставьте учетную запись IUSR_ <Chice_Name> для чтения и выполнения доступа к sessionmgr.dll.
шаги по запуску демонстрационной программы
Начните Microsoft® Internet Explorer.
Загрузите Testpage.asp для классического ASP. Номер 1 должен отображаться на веб -странице.
Нажмите «Обновить» на Internet Explorer, чтобы перезагрузить страницу. число должно быть увеличено.
Измените URL на testpage.aspx для asp.net. Число должно продолжать увеличивать.
Тот же процесс можно повторить, сначала запустив страницу Testpage.aspx.
Включение объекта COM в существующее приложение ASP
Обычной практикой в разработке приложений ASP является включение файла в начале каждого сценария, чтобы обмениваться общими кодами и константами. Лучший способ включить пользовательский объект сеанса - добавить код экземпляра в файле Common Inclue. Последний шаг - просто заменить все ссылки на объект сеанса на пользовательское имя переменной сеанса.
ограничение/улучшение
Это решение не будет поддерживать существующее приложение ASP, которое хранит объект COM в объекте сеанса. В этом случае необходим пользовательский маршалер для сериализации/десериализации состояний, чтобы использовать пользовательский объект сеанса. Кроме того, это решение не поддерживает хранение массивов типов строки. С некоторыми дополнительными усилиями, эта функция может быть реализована с помощью функции соединения Microsoft® Visual Basic® 6.0, чтобы объединить все элементы массива в одну строку, прежде чем хранить ее в объекте сеанса. Обратное может быть сделано с помощью функции разделения Visual Basic 6.0, чтобы разделить строку обратно на отдельные элементы массива. На стороне .NET Framework методы соединения и разделения являются членами класса строки.
заключение
ASP.NET представляет новую парадигму и архитектуру программирования и предлагает много преимуществ по сравнению с классическим ASP. Хотя портирование из ASP в ASP.NET не является простым процессом, лучшая модель программирования и улучшенная производительность ASP.NET сделает процесс преобразования полезным. За исключением хранения объекта COM в объекте сеанса, подход, описанный в этой статье, предлагает решение, которое упростит процесс миграции.
об авторе
Билли Юен работает в Северной Калифорнии в Центре технологий Microsoft Силиконовой долины. Этот центр фокусируется на разработке решений Microsoft .net Framework. С ним можно связаться в [Электронная почта защищена]