中国最大的 Web 开发资源网站及技术社区 ,
ASP -Implementierung
Die native ASP -Sitzung kann nur Sitzungsdaten im Speicher speichern. Um die Sitzungsdaten in SQL Server zu speichern, wird ein benutzerdefiniertes Microsoft® Visual Basic® 6.0 COM -Objekt geschrieben, um den Sitzungsstatus zu verwalten, anstatt das native Sitzungsobjekt zu verwenden. Dieses COM -Objekt wird zu Beginn jeder Webanforderung instanziiert und die Sitzungsdaten von SQL Server neu laden. Wenn das ASP -Skript fertig ist, wird dieses Objekt beendet und der Sitzungsstatus wird auf SQL Server zurückgeführt.
Der Hauptzweck des Visual Basic 6 COM -Sitzungsobjekts besteht darin, den Zugriff auf die intrinsischen Objekte von Microsoft® Internet Information Server zu gewähren. Das Visual Basic 6.0 COM -Sitzungsobjekt verwendet die MySession -Klasse von Sessionutility -Montage, um den Sitzungsstatus zu halten, und die Sitzungsklasse der Sitzungsutilität, um Sitzungsdaten mit SQL Server zu laden und zu speichern. Die MySession- und SessionPersistence -Klassen werden als COM -Objekte unter Verwendung des Dienstprogramms von Regasm.exe freigelegt. Das Dienstprogramm von Regasm.exe kann sich registrieren und eine Typbibliothek erstellen, damit der COM -Client Framework -Klassen verbraucht.
Die Sitzungsstatusinformationen werden während der Konstruktion des Objekts neu geladen. Der Konstruktor (class_initialize) ruft zunächst das Sitzungs -Cookie-, Session -Timeout (SessiontimeOut )- und Datenbankverbindungszeichenfolge (SessionDSN) aus dem Anwendungsobjekt ab und erstellt eine Instanz der Klasse MySession, um die Sitzungsdaten zu halten. Anschließend versucht der Konstruktor, die Sitzungsdaten von SQL Server mit dem angegebenen Cookie neu zu laden. Wenn der SQL -Server nicht über die Sitzungsinformationen verfügt oder die Sitzung abgelaufen ist, wird ein neuer Cookie ausgestellt. Wenn der SQL -Sever mit den Sitzungsstatusdaten zurückkehrt, wird der Sitzungsstatus im MySession -Objekt gespeichert.
private sub class_initialize ()
Bei Fehler GOTO Errhandler:
const method_name als string = class_initialize
Setzen Sie MySpressionPersistence = neue SessionPersistence
myObjectContext = getObjectContext () festlegen ()
MySessionId = ReadSessionId ()
mydsnstring = getConnectiondsn ()
mytimeout = GetSessionTimeout ()
myisnewSession = falsch
Rufen Sie Initcontents an
beenden sub
Errhandler:
Err.Raise err.number, method_name &: & err.source, err.description
Ende sub
Private Sub -Initentents ()
Bei Fehler GOTO Errhandler:
const method_name als string = initcontents
Wenn mySessionid = dann
MyContententity = New MySession einstellen
MySessionID = MySessionPersistence.GenerateKey
myisnewSession = wahr
anders
Setzen Sie MyContententity =
MySessionPersistence.LoadSession (MySessionid, Mydsnstring, Mytimeout)
Ende wenn
beenden sub
Errhandler:
Err.Raise err.number, method_name &: & err.source, err.description
Ende sub
Wenn die Objektinstanz im Skript den Umfang ausgeht, wird der Destruktor (class_terminate) ausgeführt. Der Destruktor bleibt die Sitzungsdaten mithilfe der SessionPersistence.SaveSession () -Methode fort. Wenn dies eine neue Sitzung ist, schickt der Destruktor auch den neuen Cookie zurück an den Browser.
private sub class_terate ()
Bei Fehler GOTO Errhandler:
const method_name als string = class_terate
Rufen Sie SetDataforSessionID an
beenden sub
Errhandler:
Err.Raise err.number, method_name &: & err.source, err.description
Ende sub
private sub setdataforSessionId ()
Bei Fehler GOTO Errhandler:
const method_name as string = setDataforSessionID
Rufen Sie MySessionPersistence.SaveSession (mySessionid,
Mydsnstring, MyContententity, MyisNewSession)
Wenn myisnewSession dann writeSessionId (mySessionid) rufen
MyContententity einstellen = nichts
Setzen Sie myObjectContext = nichts
mySpressionPersistence setzen = nichts
beenden sub
Errhandler:
Err.Raise err.number, method_name &: & err.source, err.description
Ende sub
Sie können den Quellcode des ASP.NET -Sessionutility -Projekts, des COM -Sitzungsmanagers und des Demo -Codes herunterladen, indem Sie auf den Link oben im Artikel klicken.
Demo -Programm
Das Demo -Programm wurde entwickelt, um eine Zahl zu erhöhen und anzuzeigen. Unabhängig davon, welche Seite geladen wird, wird die Nummer inkrementiert, da der Zahlenwert auf SQL Server gespeichert und zwischen klassischem ASP und ASP.NET geteilt wird.
Schritte zur Einrichtung des Demo -Programms
Erstellen Sie eine neue Datenbank namens SessionDemodB.
Erstellen Sie die SessState -Tabelle (OSQL.Exe –e –D SessionDemodb –i Session.sql).
Erstellen Sie ein neues virtuelles Verzeichnis namens Demo.
Schalten Sie die ASP -Sitzung unter der Registerkarte ASP -Konfiguration aus.
Kopieren Sie die web.config, testPage.aspx, global.asa, testPage.asp und globalInclude.asp in das virtuelle Verzeichnis.
Aktualisieren Sie die DSN -String -Einstellung in global.asa und web.config. Die Sitzungs -Timeout -Einstellung ist optional. Die Standardeinstellung beträgt 20 Minuten.
Installieren Sie die SessionUtility.dll in den globalen Assembly -Cache (Gacutil /i SessionUtility.dll).
Stellen Sie die SessionUtility.dll als COM -Objekt unter Verwendung der RegasM.exe (Regasm.exe Sessionutility.dll /tlb:Sessionutility.tlb) auf.
Kopieren Sie die SessionManager.dll in ein lokales Verzeichnis und verwenden Sie REGSVR32.exe, um es zu registrieren (RegSVR32 SessionManager.dll).
Gewähren Sie das Konto iusr_ <machine_name>, um den Zugriff auf die Sitzung mgr.dll zu lesen und auszuführen.
Schritte zum Ausführen des Demo -Programms
Starten Sie Microsoft® Internet Explorer.
Laden Sie die Testpage.asp für klassischen ASP. Die Nummer 1 sollte auf der Webseite angezeigt werden.
Klicken Sie im Internet Explorer auf Aktualisieren, um die Seite neu zu laden. Die Zahl sollte inkrementiert werden.
Ändern Sie die URL in testPage.aspx für ASP.NET. Die Zahl sollte weiter inkrementiert werden.
Der gleiche Vorgang kann wiederholt werden, indem zuerst die Seite testpage.aspx gestartet wird.
Einbeziehung des COM -Objekts in eine vorhandene ASP -Anwendung
Eine gängige Praxis bei der Entwicklung von ASP -Anwendungen besteht darin, eine Datei zu Beginn jedes Skripts einzuschließen, um gemeinsame Codes und Konstanten zu teilen. Der beste Weg, um das benutzerdefinierte Sitzungsobjekt zu integrieren, besteht darin, den Instantiationscode in die gemeinsame Include -Datei hinzuzufügen. Der letzte Schritt besteht einfach darin, alle Referenzen auf das Sitzungsobjekt durch den benutzerdefinierten Sitzungsvariablennamen zu ersetzen.
Einschränkung/Verbesserung
Diese Lösung unterstützt keine vorhandene ASP -Anwendung, die ein COM -Objekt im Sitzungsobjekt speichert. In diesem Fall wird ein benutzerdefinierter Marschaler benötigt, um die Zustände zu serialisieren/zu deserialisieren, um das benutzerdefinierte Sitzungsobjekt zu verwenden. Darüber hinaus unterstützt diese Lösung keine Speichern von Typ -Arrays der Zeichenfolge. Mit einigen zusätzlichen Anstrengungen kann diese Funktion mithilfe der Microsoft® Visual Basic® 6.0 -Join -Funktion implementiert werden, um alle Array -Elemente in eine einzelne Zeichenfolge zu kombinieren, bevor sie in das Sitzungsobjekt gespeichert werden. Das Gegenteil kann unter Verwendung der Visual Basic 6.0 -Split -Funktion durchgeführt werden, um die Zeichenfolge wieder in einzelne Array -Elemente aufzuteilen. Auf der .NET -Framework -Seite sind die Verbindungs- und Split -Methoden Mitglieder der String -Klasse.
Abschluss
ASP.NET repräsentiert ein neues Programmierparadigma und eine neue Architektur und bietet viele Vorteile gegenüber dem klassischen ASP. Obwohl das Portieren von ASP nach ASP.NET kein einfacher Prozess ist, lohnt sich das bessere Programmiermodell und die verbesserte Leistung von ASP.NET den Konvertierungsprozess. Mit Ausnahme des Speicherns eines COM -Objekts im Sitzungsobjekt bietet der in diesem Artikel beschriebene Ansatz eine Lösung, die den Migrationsprozess vereinfacht.
über den Autor
Billy Yuen arbeitet in Nordkalifornien im Microsoft Technology Center Silicon Valley. Dieses Zentrum konzentriert sich auf die Entwicklung von Microsoft .NET Framework Solutions. Er kann bei [E -Mail geschützt] erreicht werden