中国最大的 Web 开发资源网站及技术社区 ,
implémentation ASP
La session ASP native ne peut stocker que les données de session en mémoire. Afin de stocker les données de session à SQL Server, un objet COM Microsoft Visual Basic® 6.0 personnalisé est écrit pour gérer l'état de session au lieu d'utiliser l'objet de session natif. Cet objet COM sera instancié au début de chaque demande Web et rechargera les données de session de SQL Server. Une fois le script ASP terminé, cet objet sera terminé et l'état de session sera remonté à SQL Server.
L'objectif principal de l'objet Visual Basic 6 COM Session est de fournir un accès aux objets intrinsèques du serveur d'informations Internet Microsoft®. L'objet Session Visual Basic 6.0 COM utilise la classe MySession de l'assemblage de sessionutilité pour maintenir l'état de session, et la classe de session de session de session pour charger et enregistrer les données de session avec SQL Server. Les classes MySession et SessionPersistence sont exposées comme objets COM à l'aide de l'utilitaire Regasm.exe. L'utilitaire Regasm.exe peut enregistrer et créer une bibliothèque de type pour que le client com consomme des classes Framework.
Les informations sur l'état de session sont rechargées lors de la construction de l'objet. Le constructeur (class_initialize) récupérera d'abord le cookie de session, le délai d'expiration de session (sessionTimeout) et la chaîne de connexion de la base de données (sessiondsn) à partir de l'objet d'application et créent une instance de la classe MySession pour maintenir les données de session. Ensuite, le constructeur essaiera de recharger les données de session de SQL Server avec le cookie donné. Si le serveur SQL n'a pas les informations de session ou si la session a été expirée, un nouveau cookie sera émis. Si le SQL Sever revient avec les données de l'état de session, l'état de session sera stocké dans l'objet MySession.
Private Sub class_Initialize ()
sur l'erreur Goto errhandler:
const Method_name comme string = class_initialize
Définir MySessionSersistence = New SessionSistence
définir myObjectContext = getObjectContext ()
mySessionId = readSessionId ()
MyDSnString = getConnectionSn ()
Mytimeout = getSSESSETimeout ()
MyisnewSession = faux
Appeler les initiations
sous-marin de sortie
ErrHandler:
err.raise err.number, method_name &: & err.source, err.description
Sub-Sub
subitContents privés ()
sur l'erreur Goto errhandler:
const méthody_name as String = initContents
Si mySessionId = alors
Définir MyConTenSentity = New MySession
MySessionId = mysessionpersistence.generatekey
MyisnewSession = Vrai
autre
définir myConTtentsEntity =
MySessionPersistence.LoadSession (MySessionId, Mydsnstring, Mytimeout)
terminer si
sous-marin de sortie
ErrHandler:
err.raise err.number, method_name &: & err.source, err.description
Sub-Sub
Lorsque l'instance d'objet sort de la portée du script, le destructeur (class_termiate) s'exécutera. Le destructeur persistera les données de session à l'aide de la méthode SessionPersistence.Savession (). S'il s'agit d'une nouvelle session, le destructeur renverra également le nouveau cookie au navigateur.
Private Sub class_termiate ()
sur l'erreur Goto errhandler:
const méthody_name as String = class_termiate
appel setDataforsessionId
sous-marin de sortie
ErrHandler:
err.raise err.number, method_name &: & err.source, err.description
Sub-Sub
Sous-SetDataForsessionID privé ()
sur l'erreur Goto errhandler:
const méthody_name as String = setDataforsessionId
Appelez MySessionPersistence.Savession (MySessionId,
MyDSnstring, mycontentsEntity, myisnewSession)
Si MyisnewSession, appelez WriteSessionId (MySessionId)
Définir MyConTenSentity = Rien
définir myObjectContext = rien
Définir MySessionPersistence = Rien
sous-marin de sortie
ErrHandler:
err.raise err.number, method_name &: & err.source, err.description
Sub-Sub
Vous pouvez télécharger le code source du projet ASP.NET Sessionutility, le COM Session Manager et le code de démonstration en cliquant sur le lien en haut de l'article.
programme de démonstration
Le programme de démonstration est conçu pour incrémenter et afficher un nombre. Quelle que soit la page chargée, le nombre maintiendra l'incrémentation car la valeur du nombre est stockée dans SQL Server et est partagée entre ASP classique et ASP.NET.
Étapes pour configurer le programme de démonstration
Créez une nouvelle base de données appelée SessionDemodb.
Créez la table SESSSTATE (OSQL.EXE –E –D SessionDemodb –i session.sql).
Créez un nouveau répertoire virtuel appelé Demo.
Éteignez la session ASP sous l'onglet de configuration ASP.
Copiez le web.config, testpage.aspx, global.asa, testpage.asp et globalinclude.asp au répertoire virtuel.
Mettez à jour le paramètre de chaîne DSN dans Global.asa et web.config. Le paramètre de délai d'expiration de session est facultatif. La valeur par défaut est de 20 minutes.
Installez le SessionUtility.dll dans le cache d'assemblage global (Gacutil / i Sessionutility.dll).
Exposez le Sessionutility.dll en tant qu'objet COM à l'aide du regasm.exe (Regasm.exe Sessionutility.dll /tlb:Sessionutility.tlb).
Copiez le SessionManager.dll dans un répertoire local et utilisez RegSVR32.exe pour l'enregistrer (RegSVR32 SessionManager.dll).
Accordez le compte IUSR_ <ACTINATION_NAME> pour avoir lu et exécuter l'accès à la sessionmgr.dll.
Étapes pour exécuter le programme de démonstration
Démarrez Microsoft® Internet Explorer.
Chargez le testpage.asp pour ASP classique. Le numéro 1 doit apparaître dans la page Web.
Cliquez sur Actualiser sur Internet Explorer pour recharger la page. Le nombre doit être incrémenté.
Modifiez l'URL en testpage.aspx pour asp.net. Le nombre devrait continuer à incrémenter.
Le même processus peut être répété en démarrant d'abord la page TestPage.aspx.
Incorporer l'objet com dans une application ASP existante
Une pratique courante pour développer des applications ASP consiste à inclure un fichier au début de chaque script pour partager des codes et des constantes communs. La meilleure façon d'incorporer l'objet de session personnalisé est d'ajouter le code d'instanciation dans le fichier incluant commun. La dernière étape consiste simplement à remplacer toute référence à l'objet de session par le nom de la variable de session personnalisé.
limitation / amélioration
Cette solution ne prendra pas en charge une application ASP existante qui stocke un objet COM dans l'objet de session. Dans ce cas, un maréchaleur personnalisé est nécessaire pour sérialiser / désérialiser les états afin d'utiliser l'objet de session personnalisé. De plus, cette solution ne prend pas en charge le stockage des tableaux de type de la chaîne. Avec quelques efforts supplémentaires, cette fonctionnalité peut être implémentée en utilisant la fonction de jointure Microsoft® Visual Basic® 6.0 pour combiner tous les éléments du tableau en une seule chaîne avant de le stocker dans un objet de session. L'inverse peut être effectué en utilisant la fonction Visual Basic 6.0 Split pour ramener la chaîne en arrière en éléments de tableau individuels. Du côté .NET Framework, les méthodes de jointure et de fractionnement sont membres de la classe String.
conclusion
ASP.NET représente un nouveau paradigme de programmation et une architecture, et offre de nombreux avantages par rapport à l'ASP classique. Bien que le portage d'ASP à ASP.NET ne soit pas un processus simple, le meilleur modèle de programmation et les performances améliorées d'Asp.NET rendront le processus de conversion utile. À l'exception du stockage d'un objet COM dans l'objet de session, l'approche décrite dans cet article offre une solution qui simplifiera le processus de migration.
À propos de l'auteur
Billy Yuen travaille dans le nord de la Californie au Microsoft Technology Center Silicon Valley. Ce centre se concentre sur le développement de Solutions Microsoft .NET Framework. Il peut être joint à [e-mail protégé]