在ASP与ASP.NET之间共享对话状态(2)(2)
时间:2008-09-02 12:21:00
例程
例程设计为增加并显示一个数字。不管载入了哪个页面,由于数字值保存在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对象的特例,本文讨论的途径提供了一个简单实现迁移的解决方案。