中国最大的ウェブ开发资源网站及技术社区、
ASP実装
ネイティブASPセッションは、セッションデータのみをメモリに保存できます。セッションデータをSQL Serverに保存するために、ネイティブセッションオブジェクトを使用する代わりにセッション状態を管理するために、カスタムMicrosoft®Visual®6.0Comオブジェクトが書き込まれます。このcomオブジェクトは、各Web要求の先頭にインスタンス化され、SQL Serverからセッションデータをリロードします。 ASPスクリプトが終了すると、このオブジェクトが終了し、セッション状態がSQL Serverに戻ります。
Visual Basic 6 COMセッションオブジェクトの主な目的は、Microsoft®インターネット情報サーバーの固有オブジェクトへのアクセスを提供することです。 Visual Basic 6.0 COMセッションオブジェクトは、MySession Class of Session -Utility Assemblyを使用してセッション状態を保持し、SESSESTENCEクラスのSESSION -UTILITYを使用してSQL Serverでセッションデータをロードおよび保存します。 MySessionおよびSession -PerSistenceクラスは、Regasm.exeユーティリティを使用してcomオブジェクトとして公開されます。 Regasm.exeユーティリティは、comクライアントがフレームワーククラスを消費するためのタイプライブラリを登録および作成できます。
セッション状態情報は、オブジェクトの構築中にリロードされます。コンストラクター(class_initialize)は、最初にアプリケーションオブジェクトからセッションCookie、セッションタイムアウト(SessionTimeout)、およびデータベース接続文字列(SessionDSN)を取得し、セッションデータを保持するクラスMySessionのインスタンスを作成します。その後、コンストラクターは、特定のCookieを使用してSQL Serverからセッションデータをリロードしようとします。 SQLサーバーにセッション情報がない場合、またはセッションの有効期限が切れている場合、新しいCookieが発行されます。 SQL Severがセッション状態データで戻ってくる場合、セッション状態はMySessionオブジェクトに保存されます。
private sub class_initialize()
エラーについてGoto errhandler:
const method_name as string = class_initialize
MySessionPerSistence = new Session -PerSistenceを設定します
myobjectcontext = getObjectContext()を設定します
mySessionId = readsessionId()
mydsnstring = getConnectionDsn()
mytimeout = getSessionTimeout()
myisnewsession = false
initcontentsを呼び出します
出口サブ
errhandler:
err.raise err.number、method_name&:&err.source、err.description
End Sub
private sub initcontents()
エラーについてGoto errhandler:
const method_name as string = initcontents
mysessionId = thenの場合
myContentsEntity = new MySessionを設定します
mySessionId = mySessionPersistence.genereTkey
myisnewsession = true
それ以外
myContentsEntity =を設定します
mySessionPersistence.loadSession(mysessionId、mydsnstring、mytimeout)
ifを終了します
出口サブ
errhandler:
err.raise err.number、method_name&:&err.source、err.description
End Sub
スクリプト内のオブジェクトインスタンスが範囲外になると、Destructor(class_terminate)が実行されます。 Destructorは、sessionpersistence.savesession()メソッドを使用してセッションデータを保持します。これが新しいセッションの場合、デストラクタは新しいCookieをブラウザに送り返します。
private sub class_terminate()
エラーについてGoto errhandler:
const method_name as string = class_terminate
SetdataforsessionIdに電話してください
出口サブ
errhandler:
err.raise err.number、method_name&:&err.source、err.description
End Sub
private sub setdataforsessionid()
エラーについてGoto errhandler:
const method_name as string = setdataforsessionid
mysessionPersistence.savesession(mysessionid、
mydsnstring、mycontentsentity、myisnewsession)
myisnewsessionの場合は、writessionid(mysessionid)に電話してください
myContentsEntity = Nothingを設定します
myobjectcontext = Nothingを設定します
MySessionPersistence = Nothingを設定します
出口サブ
errhandler:
err.raise err.number、method_name&:&err.source、err.description
End Sub
記事の上部にあるリンクをクリックすると、ASP.NET Session -Utility Project、COM Session Manager、およびDemoコードのソースコードをダウンロードできます。
デモプログラム
デモプログラムは、数字を増やして表示するように設計されています。どのページが読み込まれているかに関係なく、数値がSQLサーバーに保存され、Classic ASPとASP.NETの間で共有されるため、数値は増加を続けます。
デモプログラムを設定する手順
sessiondemodbという新しいデータベースを作成します。
SessStateテーブル(osql.exe –e –d sessiondemodb –i session.sql)を作成します。
デモと呼ばれる新しい仮想ディレクトリを作成します。
[ASP構成]タブでASPセッションをオフにします。
web.config、testpage.aspx、global.asa、testpage.asp、およびglobalinclude.aspを仮想ディレクトリにコピーします。
Global.asaおよびweb.configでDSN文字列設定を更新します。セッションタイムアウト設定はオプションです。デフォルトは20分です。
sessionutility.dllをグローバルアセンブリキャッシュ(gacutil /i sessionutility.dll)にインストールします。
Regasm.exe(Regasm.exe SessionUtility.dll /tlb:Sessionutility.tlb)を使用して、comオブジェクトとしてsessionutility.dllを公開します。
sessionmanager.dllをローカルディレクトリにコピーし、regsvr32.exeを使用して登録します(regsvr32 sessionmanager.dll)。
IUSR_ <chachine_name>アカウントを付与して、sessionmgr.dllへのアクセスを読み取り、実行します。
デモプログラムを実行する手順
Microsoft®InternetExplorerを開始します。
古典的なASPにtestpage.aspをロードします。番号1はWebページに表示されます。
インターネットエクスプローラーの更新をクリックして、ページをリロードします。数値を増やす必要があります。
asp.netのurlをtestpage.aspxに変更します。数は増加を続ける必要があります。
最初にtestpage.aspxページを起動することで、同じプロセスを繰り返すことができます。
既存のASPアプリケーションにCOMオブジェクトを組み込む
ASPアプリケーションの開発における一般的な慣行は、各スクリプトの先頭にファイルを含めて、共通のコードと定数を共有することです。カスタムセッションオブジェクトを組み込む最良の方法は、共通のインクルードファイルにインスタンス化コードを追加することです。最後のステップは、セッションオブジェクトへのすべての参照をカスタムセッション変数名に置き換えることです。
制限/改善
このソリューションは、セッションオブジェクトにcomオブジェクトを保存する既存のASPアプリケーションをサポートしません。この場合、カスタムセッションオブジェクトを使用するために状態をシリアル化/脱必要にするには、カスタムマーシャラーが必要です。さらに、このソリューションは、文字列のタイプ配列の保存をサポートしていません。いくつかの追加の努力があれば、この機能は、Microsoft®VisualBasic®6.0Join Functionを使用して、すべての配列要素を単一の文字列に結合してからセッションオブジェクトに保存することで実装できます。逆は、Visual Basic 6.0分割関数を使用して、文字列を個々の配列要素に分割することができます。 .NETフレームワーク側では、結合メソッドとスプリットメソッドは文字列クラスのメンバーです。
結論
ASP.NETは、新しいプログラミングパラダイムとアーキテクチャを表しており、古典的なASPよりも多くの利点を提供します。 ASPからASP.NETへの移植は単純なプロセスではありませんが、ASP.NETのより優れたプログラミングモデルとパフォーマンスの向上は、変換プロセスを価値のあるものにします。 COMオブジェクトをセッションオブジェクトに保存することを除き、この記事で説明するアプローチは、移行プロセスをより簡単にするソリューションを提供します。
著者について
ビリー・ユエンは、カリフォルニア州北部でマイクロソフトテクノロジーセンターのシリコンバレーで働いています。このセンターは、Microsoft .NETフレームワークソリューションの開発に焦点を当てています。彼は[電子メール保護]で連絡することができます