当前位置:首页 > 网络编程 > WEB编程 > ASP.net > 在ASP与ASP.NET之间共享对话状态(2)

在ASP与ASP.NET之间共享对话状态(2)

点击次数:19 次 发布日期:2008-11-27 02:04:21 作者:源代码网
源代码网推荐
源代码网推荐  ASP实现
源代码网推荐  
源代码网推荐  原来的ASP对话只能将对话数据保存在内存中。为了将对话数据保存到SQL Server,需要写一个自定义的Visual Basic 6.0 COM对象代替现在的对话对象来管理对话状态。该COM对象在每个Web请求开始时被初始化,并从SQL Server重新载入对话数据。ASP脚本完成时,该对象将终止并把对话状态将返回到SQL Server。
源代码网推荐  
源代码网推荐  Visual Basic 6 COM Session对象的主要目的是提供对微软Internet信息服务器(IIS)内部对象的访问。Visual Basic 6 COM对话对象使用SessionUtility组件的mySession类来保存对话状态,SessionUtility的SessionPersistence类用于载入和保存对话数据到SQL Server。使用regasm.exe工具将mySession和 SessionPersistence类作为COM对象暴露。regasm.exe工具可以注册并为COM客户端建立一个类型库来使用框架组件类。
源代码网推荐  
源代码网推荐  在对象的构造函数中状态信息被重新载入。构造函数(class_initialize)首先从Application对象中检索对话cookie、对话超时设置(SessionTimeOut)、数据库连接字符串(SessionDSN),并建立mySession类的一个实例来保持对话数据。接着构造函数将试图重新使用给定的cookie从SQL Server中载入对话数据。如果SQL Server中没有对话信息,或者对话已经终止,将产生一个新的cookie。如果SQL Server返回了对话状态数据,对话状态信息将保存在mySession对象中。
源代码网推荐  
源代码网推荐  Private Sub Class_Initialize()
源代码网推荐  On Error GoTo ErrHandler:
源代码网推荐  Const METHOD_NAME As String = "Class_Initialize"
源代码网推荐  Set mySessionPersistence = New SessionPersistence
源代码网推荐  Set myObjectContext = GetObjectContext()
源代码网推荐  mySessionID = ReadSessionID()
源代码网推荐  myDSNString = GetConnectionDSN()
源代码网推荐  myTimeOut = GetSessionTimeOut()
源代码网推荐  myIsNewSession = False
源代码网推荐  Call InitContents
源代码网推荐  
源代码网推荐  Exit Sub
源代码网推荐  ErrHandler:
源代码网推荐  Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description
源代码网推荐  End Sub
源代码网推荐  
源代码网推荐  Private Sub InitContents()
源代码网推荐  On Error GoTo ErrHandler:
源代码网推荐  Const METHOD_NAME As String = "InitContents"
源代码网推荐  If mySessionID = "" Then
源代码网推荐  Set myContentsEntity = New mySession
源代码网推荐  mySessionID = mySessionPersistence.GenerateKey
源代码网推荐  myIsNewSession = True
源代码网推荐  Else
源代码网推荐  Set myContentsEntity =mySessionPersistence.LoadSession(mySessionID, myDSNString,  myTimeOut)
源代码网推荐  End If
源代码网推荐  
源代码网推荐  Exit Sub
源代码网推荐  ErrHandler:
源代码网推荐  Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description
源代码网推荐  End Sub
源代码网推荐  
源代码网推荐  如果对象实例超出了脚本的范围,将执行解构函数(class_terminate)。解构函数将使用SessionPersistence.SaveSession()方法保持对话数据。如果是一个新对话,解构函数将新cookie发送回浏览器。
源代码网推荐  
源代码网推荐  Private Sub Class_Terminate()
源代码网推荐  On Error GoTo ErrHandler:
源代码网推荐  Const METHOD_NAME As String = "Class_Terminate"
源代码网推荐  Call SetDataForSessionID
源代码网推荐  Exit Sub
源代码网推荐  ErrHandler:
源代码网推荐  Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description
源代码网推荐  End Sub
源代码网推荐  
源代码网推荐  Private Sub SetDataForSessionID()
源代码网推荐  On Error GoTo ErrHandler:
源代码网推荐  Const METHOD_NAME As String = "SetDataForSessionID"
源代码网推荐  Call mySessionPersistence.SaveSession(mySessionID,
源代码网推荐  myDSNString, myContentsEntity, myIsNewSession)
源代码网推荐  
源代码网推荐  If myIsNewSession Then Call WriteSessionID(mySessionID)
源代码网推荐  
源代码网推荐  Set myContentsEntity = Nothing
源代码网推荐  Set myObjectContext = Nothing
源代码网推荐  Set mySessionPersistence = Nothing
源代码网推荐  Exit Sub
源代码网推荐  ErrHandler:
源代码网推荐  Err.Raise Err.Number, METHOD_NAME & ":" & Err.Source, Err.Description
源代码网推荐  End Sub
源代码网推荐  
源代码网推荐  例程
源代码网推荐  
源代码网推荐  例程设计为增加并显示一个数字。不管载入了哪个页面,由于数字值保存在SQL Server中并在ASP和ASP.NET间共享,数字将不断增加。
源代码网推荐  
源代码网推荐  建立例程的步骤
源代码网推荐  
源代码网推荐  1. 建立一个新数据库SessionDemoDb。
源代码网推荐  
源代码网推荐  2. 建立新表SessState(osql.exe -E -d SessionDemoDb -i Session.sql)。
源代码网推荐  
源代码网推荐  3. 建立新虚拟目录Demo。
源代码网推荐  
源代码网推荐  4. 在ASP配置页中关闭ASP对话。
源代码网推荐  
源代码网推荐  5. 将web.config、testPage.aspx、Global.asa、testPage.asp和GlobalInclude.asp复制到虚拟目录。
源代码网推荐  
源代码网推荐  6. 更新Global.asa和web.config中的DSN字符串设置。对话超时设置是可选的,默认为20分钟。
源代码网推荐  
源代码网推荐  7. 将SessionUtility.dll安装到全局组件缓存(gacutil /i SessionUtility.dll)。
源代码网推荐  
源代码网推荐  8. 使用regasm.exe把SessionUtility.dll作为COM对象暴露(regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb)。
源代码网推荐  
源代码网推荐  9. 将SessionManager.dll复制到本地目录并使用regsvr32.exe注册(regsvr32 SessionManager.dll)。
源代码网推荐  
源代码网推荐  10. 赋予IUSR_<计算机名>帐户读取和运行访问SessionMgr.dll的权限。
源代码网推荐  
源代码网推荐  运行例程的步骤
源代码网推荐  
源代码网推荐  1. 打开微软Internet Explorer。
源代码网推荐  
源代码网推荐  2. 为传统的ASP中载入testPage.asp。数字"1"将出现在Web页中。
源代码网推荐  
源代码网推荐  3. 点击Internet Explorer的刷新来重新载入该页面。数字将增加。
源代码网推荐  
源代码网推荐  4. 为ASP.NET改变URL为testPage.aspx。数字仍然增加。
源代码网推荐  
源代码网推荐  5. 如果使用testPage.aspx开始,过程相同。
源代码网推荐  
源代码网推荐  在存在的ASP应用程序中插入COM对象
源代码网推荐  
源代码网推荐  开发ASP应用程序的一个通常的习惯是在每个脚本开始时包含一个文件来共享代码和常量。插入自定义对话对象的最后途径是在公有包含文件中加入示例代码。最后一步简单地使用自定义对话变量名代替了所有到对话对象的引用。
源代码网推荐  
源代码网推荐  限制/改进
源代码网推荐  
源代码网推荐  本方案不支持在Session对象中保存了COM对象的ASP应用程序。在这种情况下,为了使用自定义对话对象,需要一个自定义的调度器来串行化/并行化状态。此外,本方案也不支持保存字符串类型数组。做一些附加工作可以实现该特性:使用Visual Basic 6.0的Join函数在保存到对话对象前将数组元素连接成一个字符串,反向操作可以使用Visual Basic 6.0的Split函数将字符串分解为独立的数组元素。在.NET框架组件中,Join和Split方法使String类的成员。
源代码网推荐  
源代码网推荐  结论
源代码网推荐  
源代码网推荐  ASP.NET提出了新的编程范例和体系结构,并提供了许多比传统ASP的好处。尽管将ASP移植到ASP.NET的过程不简单,ASP.NET更好的编程模型和更高的性能将使转换过程值得。除了在Session对象中保存COM对象的特例,本文讨论的途径提供了一个简单实现迁移的解决方案。

源代码网推荐
源代码网推荐
源代码网推荐
源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华