2006-11-26 22:21:38
大中小
问题起因:新系统将要全面用.net平台来开发,前面两年的工作都是用ASP来开发,如果费除的话,工作量很大,但后续的系统在ASP上实现困难,在以后的安全和升级打包上asp.net比ASP要强大多了,所以决定后面的开发转.net平台,首先就遇到了一个Session值的问题.因为asp和asp.net完全不同,虽都可以有IIS下执行,asp是面向过程开发,其实都算不上开发,只能算是vbscript,和javascript脚本语言,session值都是存储在服务器内存中,所以在线用户越多,session定义的越多,系统内存就占的越大;asp.net完全是采用数所库存储的.两者session值存储方式完全不同,直接传值肯定行不通.
解决办法:在网上找一些资料,问一些.net的老鸟,答案都是不能实现,都说要推翻重新用.net做.周六晚上,想的头痛了,还是没有找到方法,我是问题没有解决,睡觉都会想的.在今天下午终于我在微软msdn网站上找到了解决办法http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/default.mspx?mfr=true, 要说明的是这里也有些错误的地方,如果的照搬肯定也会现出错.
上面是原理图:
程序代码下载
设置步骤 " 创建一个名为 SessionDemoDb 的新数据库。(库名可以自己根据项目不动)
" 创建 SessState 表 (osql.exe -E -d SessionDemoDb -i Session.sql)。
" 创建名为 Demo 的新虚拟目录。
" 关闭 ASP 配置选项卡中的 ASP Session。
" 将 web.config、testPage.aspx、Global.asa、testPage.asp 和 GlobalInclude.asp 复制到虚拟目录中。
" 更新 Global.asa 和 web.config 中的 DSN 字符串设置。会话超时设置是可选的。默认值为 20 分钟。?
" 将 SessionUtility.dll 安装到 Global Assembly Cache (gacutil /i SessionUtility.dll)。
" 利用 regasm.exe 将 SessionUtility.dll 公开为 COM 对象 (regasm.exe SessionUtility.dll /tlb:SessionUtility.tlb)。
" 将 SessionManager.dll 复制到一个本地目录中,并利用 regsvr32.exe 注册该文件 (regsvr32 SessionManager.dll)。
" 为 IUSR_<machine_name> 帐号赋予对 SessionMgr.dll 的读和执行权限。
小结
ASP.NET 代表了一种全新的编程典范和结构,并且比传统的 ASP 具有更多优势。虽然从 ASP 迁移到 ASP.NET 并不是一个简单的过程,但 ASP.NET 更好的编程模型和更高的性能使得这种转换过程物有所值。