| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
|
原来的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 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||