asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP与ASP.NET转换Session数据桥的应用


发布日期:2018年05月08日
 
ASP与ASP.NET转换Session数据桥的应用

背景:

现有公司的产品OA是采用ASP早先的技术开发需要与目前最新的ASPNET产品进行数据交互的应用现有的ASP应用程序往往采用ASP Sessions这是一种经典的ASP内置模式即允许数据临时暂存在Web服务器内存中其最大的限制因素就是ASP的session状态是依赖具体的服务器而另一个更宽范围的解决方案就是很多Web服务器都可能别用于根据请求而指向的任何网络服务器实际上就是所有的WEB服务器都像在一个农场中因而任何在内存中的session状态将不会自动跟随请求每个ASP服务器提供自己的session状态除非用户很凑巧的返回统一服务器造成系统session丢失

通过使用服务器管理产品(如bigip)来强制用户会同意服务器内的Web农场来解决内存中ASP Session因服务器关系而造成的问题为了达到这个目的采用一个cookie在客户端工作在服务器端来使用让用户直接可以回到同一个服务器上的每个reqeust这样可以限制扩展性提高可维护性避免服务器故障的风险(例如session丢失服务器 失败)

微软ASPNET技术的出现终于解决了这个问题可以让我们来存储session信息到Web Server和database或者其他域server不错问题解决了我们还有必要用ASP代码吗?全部扔掉?如果这样做的话就会需要很大代价去重新使用NET来重写ASP看来还是不可行另一种比较好的解决方案就是用迭代方法来部分移植代码到新的模型胜过重写ASP代码在这个过程中如果旧的ASP代码和新的ASPNET代码可以有一个共同的session状态而保持正常的工作那么在整个生命周期中将会有益于你更好的规避风险以下提供了几个解决方案从此略上来解决当采用经典的ASP Session因服务器关系而造成的问题

用户自定义组或者使用ASP/ADO脚本去实现直接读写用户session数据到数据库

用户自定义组件去直接访问ASPNET Session数据

通过Web Services建立ASP到ASPNET的桥共享session

在本文中我们将讨论最后一种方案其中也会包括一些Web Services与ASP/ADO定制数据库和ASP Session 池的基本性能数据比较呵呵看完后你自己选择用哪个

ASP to ASPNET Bridge / WebService 方案

此方案中只是简单的实现了一个从ASP到ASPNET的Web Services桥梁如果你需要用数据库只需要进行简单的配置(ngfig和aspState 数据库)代码中用来获得和设置session数据的方法写在一个Java Scirpt中该文件必须保存在本地ASP程序中

此Java Script实现MSXMLHTTP功能以便和server端交互并负责将这些cookie回收给用户工作站

优点

支持与服务器无关的webfarm部署提高可扩展性简单的实现ASP和ASPNET的共同session状态松耦合以session管理(无连接的HTTP接口 端口可防火墙等)利用久经时间考验的ASPNET Session实施

缺点 比ASP Session 内存池实现和数据库实现会慢

)thisstylewidth=; border= twffan=done>

ASP内存共享机制:

Session是采用类似字典或者哈希表的形势保存在Web Server内存中ASP会保持session状态提过一个特别的key给用户当session会话开始时这个key将保存cookie来纪录客户端发送到服务器的每一项请求在服务器端获得cookie的key就可以知道request对应的session这种机制的一个明显的优势就是速度和方便所有的session都会在一台服务器上保存所以很开但是正如前面所说的将数据保存在一台服务器也是一个重大缺点迫使用户返回同一台服务器检索session数据这个减少了webform的优势它只是一种低成本大淘汰的策略如果你只想实现简单功能就可以用它

优点

内存纪录session速度快使用标准的ASP代码基础利用久经时间考验的ASP Session实施

缺点

它承载的能力有限无法大规模开展网络农场(服务器依赖度高) 服务器故障导致session丢失内存占有率太大

image onmousewheel=javascript:return big(this) height= alt= src=http://imgeducitycn/img_///gif width= onload=javascript:if(thiswidth>)thisstylewidth=; border= twffan=done>

ASP/ADO数据库实现解决方案

建立了一个数据库连接之间的ASP应用服务器和数据库服务器使数据被存在一个中央数据库或者数据库集群然后分别从不同的服务器上的ASP程序执行本文种只给出方案获取和设置session的代码可以被放进一个Java Script文件中支持基于Web Services获取的方法允许ASP取代Java Script定制数据库模式直接访问ASPNET Session数据(如建立aspstate数据库)

优点

支持不依赖服务器的web form部署

比ASPNET Web服务更快

缺点

代码为定制执行(比较死板)

比内存共享ASP Session 慢

需要数据库连接从网络服务器到数据库服务器

image onmousewheel=javascript:return big(this) height= alt= src=http://imgeducitycn/img_///gif width= onload=javascript:if(thiswidth>)thisstylewidth=; border= twffan=done>

性能

在下面数据中列出了每种方案的性能比较强调的是内存共享ASP Session池最快小型用户可以使用采用数据库的话也会增加额外的开支增加成本(除非你很有钱)减 少网络回传服务器请求是提高性能的唯一方法微软的Web应用程序压力工具是用来执行测试压力水平的个线程为分钟的时间从表中可以明显的看出用内存存储ASP Session比另外两种方式更快

Method Get Data (ms) Set Data (ms)

values value values value

Inmemory ASP Sessions

ASP/ASPNET web service individually

ASP/ASPNET web service grouped

ASP/ADO database individually

ASP/ADO database grouped

代码描述ASP机制

在asp中创建session如下

borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=# border=>ee>

Session(Sky) = Blue;

在其他的页面中访问这些值采用

borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=# border=>ee>

var skyString = Session(Sky);

新的API语法

下面的语法将会代替原来的ASP Session 语法目的是在桥的使用中Java Script 函数可以进行封装设置一个关键值对设置一个kyevalue 类型session 数据语法和值钱的ASP Session语法很相似采用下面的代码可以把现有的设置ASP Session代码替换

设置session数据

borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=# border=>ee>

SetSessionValue(Sky Blue);

获取session:

borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=# border=>ee>

var SkyString = GetSessionValue(Sky);

这种方法建议在设置比较少的情况下用

设置多个keyvalues对值

这些方法的最大开销在于设置每一个keyvalue然后返回给Web Service推荐用以下方法来设置(当超过对以上的keyvalues)

设置session

borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=# border=>ee>

var sessionInfo = NewSession();

sessionInfoAdd(Sky Blue);

sessionInfoAdd(Grass Green);

SetSession(sessionInfo);

获得session

var sessionInfo = GetSession();

var skyString = sessionInfoItem(Sky);

var grassString = sessionInfoItem(Grass);

Java Script Example

<%@ Language=JScript %>

上一篇:如何利用缓存提高ASP.NET网站速度

下一篇:asp.net教程-委托(Delegate)