通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务
当前位置:首页>>编程开发>>asp专区>>正文 新版上线![旧版]
注:打开慢时请稍等
在asp与asp.net之间共享对话状态(2)

http://www.iyit.net  日期:2006-5-3 15:31:22  来源:动网  点击:
参加讨论】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对象的特例,本文讨论的途径提供了一个简单实现迁移的解决方案。

编辑: [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:web打印大全
下一篇:在asp与asp.net之间共享对话状态(1)
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
asp直接调用excel数据的例子(不用odbc 将sax加入我们的asp应用中 java和asp的交互(一)
java和asp的交互(二) asp与jsp的比较(2) asp与jsp的比较(1)
php和asp对象的等价关系 php vs asp asp初学者常犯的几个错误
浅谈如何建立三层体系结构的asp应用程序 iis6.0下asp的新增功能 用asp实现对oracle数据库的操作
asp操作excel技术总结 利用asp+jmail进行邮件群发的新思路 在asp与asp.net之间共享对话状态(1)
asp自动解压rar文件 一段在asp中加密与解密对应的函数 asp基础
刷一次变一次图的asp代码 asp,php 和 jsp 比较 之我见 [asp]利用 xmlhttp 分块上传文件
在asp中使用sql语句之5:开始执行 在asp中使用sql语句之4:联合语句 在asp中使用sql语句之3:like、not like
最新更新 热点排行 推荐新闻
处理较长文章,添加 …… 效果
rs.open sql,conn,1,1全接触
asp初学者常犯的几个错误
windows 2000活动目录详解之安装配置篇
浅谈如何建立三层体系结构的asp应用程
vc++实现对远程计算机屏幕的监视
vc下揭开“特洛伊木马”的隐藏面纱
多线程技术在vc++串口通信程序中的应用
用vc++制作一个简单的局域网消息发送工
用vc++6.0的sockets api实现一个聊天室
用vc++实现上网拨号功能
使用visual c++开发soap客户端应用
vc++ smtp协议电子邮件传送剖析
vc++实现gps全球定位系统定位数据的提
用vc 6.0实现串行通信的三种方法
asp进度条
asp中使用sql语句教程
datalist里套datagrid,databind
测试一下喽!
asp自动解压rar文件
qq珊瑚虫外挂4.0版本发布!
多个广告位招商!
摄影后期系列一:1分钟为数码相片去红眼
qq挂机说明
asp进度条
photoshop通道抠图:给秀发飞扬的mm照
教您显示器亮度对比度的调节
新版上线,今日正式开通!!!
更多精彩图文广告等着您!
asp中使用sql语句教程
asp中使用sql语句教程
测试一下喽!
第二十章 开发delphi对象式数据管理功
sql简明教程(1)
vbscript和javascript互相调用 
jsp教程(四)-jsp actions的使用
操作系统被入侵后的修复过程
五一别忘电脑防毒 养成良好上网习惯
google对ie浏览器将捆绑搜索功能表担忧
新版上线,今日正式开通!!!
用photoshop创意图形“岁月”
摄影后期系列一:1分钟为数码相片去红眼

 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息