中国最大的 Web 开发资源网站及技术社区 ,
Implementación de ASP
La sesión ASP nativa solo puede almacenar datos de sesión en la memoria. Para almacenar los datos de la sesión en SQL Server, se escribe un objeto personalizado Microsoft® Visual Basic® 6.0 COM para administrar el estado de sesión en lugar de usar el objeto de sesión nativo. Este objeto COM se instanciará al comienzo de cada solicitud web y recargará los datos de la sesión del servidor SQL. Cuando se termine el script ASP, este objeto finalizará y el estado de la sesión se persistirá nuevamente al servidor SQL.
El propósito principal del objeto de sesión de Visual Basic 6 COM es proporcionar acceso a los objetos intrínsecos del servidor de información de Internet de Microsoft®. El objeto de sesión de Visual Basic 6.0 COM utiliza la clase MySession del ensamblaje de SessionUtility para mantener el estado de la sesión y la clase SessionPersistence de SessionUtility para cargar y guardar datos de sesión con SQL Server. Las clases de MySession y SessionPersistence están expuestas como objetos COM utilizando la utilidad Regasm.exe. La utilidad Regasm.exe puede registrarse y crear una biblioteca de tipo para que el cliente COM consuma clases de marco.
La información del estado de la sesión se vuelve a cargar durante la construcción del objeto. El constructor (class_initialize) primero recuperará la cookie de sesión, el tiempo de espera de la sesión (sessiontimeout) y la cadena de conexión de la base de datos (sessionDSN) desde el objeto de aplicación, y creará una instancia de la clase mySession para mantener los datos de la sesión. Luego, el constructor intentará volver a cargar los datos de la sesión del servidor SQL con la cookie dada. Si el servidor SQL no tiene la información de la sesión, o la sesión ha sido expirada, se emitirá una nueva cookie. Si el SQL Sever regresa con los datos del estado de la sesión, el estado de la sesión se almacenará en el objeto MySession.
Sub class_initialize () privado ()
En error de error goto errhandler:
const métod_name como string = class_initialize
Establecer mySessionPersistence = nueva sessionPersistence
establecer myObjectContext = getObjectContext ()
mySessionID = ReadSessionId ()
mydsnString = getConnectiondsn ()
myTimeOut = getSessionTimeOut ()
myisnewsession = falso
Llame a InitContents
Salir
ErrHandler:
Err.raise Err.Number, Method_Name &: & Err.Source, Err.Description
final
PRIVADO SUB INITCONTENTS ()
En error de error goto errhandler:
const métod_name como string = initContents
Si mySessionID = entonces
Establecer myContentSEntity = nuevo mysession
mySessionID = mySessionPersistence.GenerateKey
myisnewsession = verdadero
demás
Establecer myContentSEntity =
mySessionPersistence.LoadSession (MySessionID, Mydsnstring, MyTimeOut)
final si
Salir
ErrHandler:
Err.raise Err.Number, Method_Name &: & Err.Source, Err.Description
final
Cuando la instancia del objeto salga del alcance en el script, el destructor (class_terminate) se ejecutará. El destructor persistirá los datos de la sesión utilizando el método SessionPersistence.Savesession (). Si esta es una nueva sesión, el destructor también enviará la nueva cookie al navegador.
Sub class_terminate () privado ()
En error de error goto errhandler:
const métod_name como string = class_terminate
llamadas setdataforsessionid
Salir
ErrHandler:
Err.raise Err.Number, Method_Name &: & Err.Source, Err.Description
final
Sub setDataForsessionID () privado ()
En error de error goto errhandler:
const métod_name como string = setDataForsessionId
Llame a MySessionPersistence.Savesession (MySessionID,
Mydsnstring, MyContentsEntity, MyisNewsession)
Si MyisNewsession, llame a WriteSessionID (MySessionID)
Establecer myContentSEntity = nada
establecer myObjectContext = nada
Establecer mySessionPersistence = nada
Salir
ErrHandler:
Err.raise Err.Number, Method_Name &: & Err.Source, Err.Description
final
Puede descargar el código fuente del proyecto ASP.NET SessionUtility, el administrador de sesión COM y el código de demostración haciendo clic en el enlace en la parte superior del artículo.
programa de demostración
El programa de demostración está diseñado para incrementar y mostrar un número. Independientemente de qué página se cargue, el número se seguirá incrementando porque el valor de número se almacena en SQL Server y se comparte entre ASP clásico y ASP.NET.
Pasos para configurar el programa de demostración
Cree una nueva base de datos llamada SessionDemodb.
Cree la tabla SessState (Osql.exe –e –d SessionDemodb –i session.sql).
Cree un nuevo directorio virtual llamado demostración.
Apague la sesión ASP en la pestaña Configuración ASP.
Copie Web.Config, TestPage.aspx, Global.asa, TestPage.asp y GlobalInclude.asp al directorio virtual.
Actualice la configuración de cadena DSN en Global.asa y Web.Config. La configuración de tiempo de espera de la sesión es opcional. El valor predeterminado es de 20 minutos.
Instale el sessionUtility.dll en el caché de ensamblaje global (gacutil /i sessionUtility.dll).
Exponga el sessionUtility.dll como un objeto COM utilizando regasm.exe (regasm.exe sessionUtility.dll /tlb:sessionUtility.tlb).
Copie el SessionManager.dll a un directorio local y use regsvr32.exe para registrarlo (regsvr32 sessionsManager.dll).
Otorgue la cuenta IUSR_ <Cachine_Name> para leer y ejecutar el acceso a la sesión de sessionmgr.dll.
Pasos para ejecutar el programa de demostración
Inicie Microsoft® Internet Explorer.
Cargue el TestPage.asp para ASP clásico. El número 1 debe aparecer en la página web.
Haga clic en Actualizar en Internet Explorer para recargar la página. El número debe ser incrementado.
Cambie la URL a TestPage.aspx para ASP.NET. El número debe seguir incrementando.
El mismo proceso se puede repetir iniciando primero la página TestPage.aspx.
incorporando el objeto COM en una aplicación ASP existente
Una práctica común en el desarrollo de aplicaciones ASP es incluir un archivo al comienzo de cada script para compartir códigos y constantes comunes. La mejor manera de incorporar el objeto de sesión personalizado es agregar el código de instanciación en el archivo de inclusión común. El último paso es simplemente reemplazar toda la referencia al objeto de sesión con el nombre de la variable de sesión personalizado.
limitación/mejora
Esta solución no admitirá una aplicación ASP existente que almacena un objeto COM en el objeto de sesión. En este caso, se necesita un mariscal de personalizado para serializar/deserializar los estados para usar el objeto de sesión personalizado. Además, esta solución no admite matrices de tipo de almacenamiento de la cadena. Con un esfuerzo adicional, esta característica se puede implementar utilizando la función de unión Microsoft® Visual Basic® 6.0 para combinar todos los elementos de la matriz en una sola cadena antes de almacenarlo en el objeto de sesión. El reverso se puede hacer utilizando la función dividida de Visual Basic 6.0 para dividir la cadena nuevamente en elementos de matriz individuales. En el lado del marco .NET, los métodos de unión y división son miembros de la clase de cadena.
conclusión
ASP.NET representa un nuevo paradigma y arquitectura de programación, y ofrece muchas ventajas sobre el clásico ASP. Aunque el portamiento de ASP a ASP.NET no es un proceso simple, el mejor modelo de programación y el rendimiento mejorado de ASP.NET harán que valga la pena el proceso de conversión. Con la excepción de almacenar un objeto COM en el objeto de sesión, el enfoque descrito en este artículo ofrece una solución que simplificará el proceso de migración.
sobre el autor
Billy Yuen trabaja en el norte de California en el Microsoft Technology Center Silicon Valley. Este centro se centra en el desarrollo de soluciones de Microsoft .NET Framework. Se le puede contactar en [correo electrónico protegido]