• 网络学院
  • 新手学堂
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
在ASP与ASP.NET之间共享对话状态(2)
广告位
  站点:
  • 首 页
  • 最新软件
  • 最新文章
  • 国内软件
  • 国外软件
  • 汉化软件
  • 源码下载
  • 字体下载
在ASP与ASP.NET之间共享对话状态(2)
软件发布 在ASP与ASP.NET之间共享对话状态(2)
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回首页 | 文章首页 | 编程技术 | ASP & ASP.NET教程 | 在ASP与ASP.NET之间共享对话状态(2)

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

 

添加时间: 2006-5-7 4:07:16  作者: ASP教程  阅读次数:270   来源: http://d9soft.com

 

 

       

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对象的特例,本文讨论的途径提供了一个简单实现迁移的解决方案。

 

 

 

上下文章:

 

上一篇文章: 17种正则表达式 下一篇文章: 九阳神功 ASP.NET技术的学习顺序

相关文章:

  • 如何定义数据库表之间的关系
  • 如何定义数据库表之间的关系
  • 彻底封杀操作系统的共享漏洞
  • 别再糊涂 把共享就放在你眼皮底下
  • WinGate与Internet连接共享

相关软件:

  • ibox游戏共享平台 V1.1.1
  • 日语口语对话王 V2008 Build 0611
  • 英语口语对话王 V2008 Build 0611
  • HomeShare宽带共享 V2.55
  • 闪电共享 V1.0.2
  • 阿冲共享文件监控器 V4.0

 

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • 九阳神功 ASP.NET技术的学习顺序
  • 在ASP与ASP.NET之间共享对话状态(...
  • 17种正则表达式
  • 关闭窗口时保存数据的办法
  • 一个新的JMail(4.3版本)发送代码
  • 一个很简单的验证码程序
  • 用正则解析图片地址,并利用XMLHTT...
  • 利用ASP+JMAIL进行邮件群发的新思...
  • ASP操作Excel技术总结
  • MD5算法研究(2)

ASP & ASP.NET教程阅读排行

  • 用纯ASP代码实现图片上传
  • ASP数据库简单操作教程
  • aspjpeg组件高级使用方法介绍
  • 一个拷贝整个文件夹(包括子文件夹...
  • 利用ASP技术实现文件直接上传功能
  • 几例在ASP存储过程的使用方法
  • 一个很简单的验证码程序
  • 创建一个ASP通用分页类(一)
  • ASP操作Excel技术总结
  • 一个新的JMail(4.3版本)发送代码

编程技术阅读总排行

  • VB入门教程之一
  • 第二章 PowerBuilder 入门之创建新...
  • Java连接数据库实例
  • 第一章 什么是PowerBuilder
  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有