背景:

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

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

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

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

2、用户自定义组件去直接访问ASP.NET Session数据;

3、通过Web Services建立ASP到ASP.NET的桥共享session;

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

ASP to ASP.NET Bridge / Web-Service 方案

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

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

优点:

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

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

ASP内存共享机制:

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

优点:

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

缺点:

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

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

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

优点:

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

2、比ASP.NET Web服务更快;

缺点:

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

2、比内存共享ASP Session 慢;

3、需要数据库连接,从网络服务器到数据库服务器;

性能:

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

Method Get Data (ms) Set Data (ms)

5 values 1 value 5 values 1 value

In-memory ASP Sessions 46 9 34 7

ASP/ASP.NET web service individually 4321 864 3397 679

ASP/ASP.NET web service grouped 711 142 990 198

ASP/ADO database individually 346 69 841 168

ASP/ADO database grouped 163 33 860 172

代码描述ASP机制,

在asp中创建session如下:

Session("Sky") = "Blue";

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

var skyString = Session("Sky");

新的API语法:

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

设置session数据:

SetSessionValue("Sky", "Blue");

获取session:

var SkyString = GetSessionValue("Sky");

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

设置多个key-values对值

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

设置session

var sessionInfo = NewSession();sessionInfo.Add(“Sky”, "Blue");sessionInfo.Add(“Grass”, “Green”);SetSession(sessionInfo);

获得session

var sessionInfo = GetSession();var skyString = sessionInfo.Item(“Sky”);var grassString = sessionInfo.Item(“Grass”);Java Script Example       通行证:  密码:            验证码:   (点击刷新验证码)   匿名发表

文章转载自网管之家:http://www.bitscn.com/pdb/dotnet/200904/160674.html

ASP与ASP.NET转换Session数据桥的应用的更多相关文章

  1. ASP.NET多种不同页面间数据传递的方法

    1. Get(即使用QueryString显式传递)     方式:在url后面跟参数.     特点:简单.方便.     缺点:字符串长度最长为255个字符:数据泄漏在url中.     适用数据 ...

  2. 在asp.net中如何使用Session

    2.那么在asp.net中到底该怎么使用Session呢? Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换 ...

  3. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

  4. ASP模拟POST请求异步提交数据的方法

    这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...

  5. Jquery zTree结合Asp.net实现异步加载数据

    zTree结合Asp.net实现异步加载数据 实现简单操作 zTree 下载 api 访问 :http://www.ztree.me/v3/main.php 例子中用到json数据转化 newtons ...

  6. 转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法

    转载原地址 http://www.cnblogs.com/cuishao1985/archive/2009/09/24/1573403.html ASP.NET状态管理 APPlication,Ses ...

  7. ASP.NET之Application、Session和Cookie的差别

    在Asp.net中Application.Session和Cookie都能够保存信息,那么它们有什么不同呢? 一.首先Application是在server端建立一个状态变量,存储于server的全局 ...

  8. ASP.NET状态服务及session丢失问题解决方案总结

    原文:ASP.NET状态服务及session丢失问题解决方案总结[转载] asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule ...

  9. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)

    一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...

随机推荐

  1. SharePoint 2010 PowerShell 系列 之 备份、还原、部署 .WSP

    转:http://www.cnblogs.com/Fengger/archive/2012/08/24/2654093.html PowerShell系列目录 最近在部署测试环境,就顺便把PowerS ...

  2. Linux下的nginx启动、重新启动

    nginx的启动命令是: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -c制定配置文件的路径,不加-nginx会自动 ...

  3. useradd adduser linux创建用户、设置密码、修改用户、删除用户

    创建用户.设置密码.修改用户.删除用户: useradd testuser 创建用户testuser passwd testuser 给已创建的用户testuser设置密码 说明:新创建的用户会在/h ...

  4. 转自微软内部资料:编写高性能 Web 应用程序的 10 个技巧

    编写高性能 Web 应用程序的 10 个技巧 转自微软资料数据层性能技巧 1 — 返回多个结果集技巧 2 — 分页的数据访问技巧 3 — 连接池技巧 4 — ASP.NET 缓存 API技巧 5 — ...

  5. 【转】Getting xrdp to work on CentOS 6.4

    vi /etc/selinux/config SELINUX=disabled reboot Step 1: #rpm -Uvh http://pkgs.repoforge.org/rpmforge- ...

  6. javaweb 之javascript 结合

    1.javascript的简介 * 是基于对象和事件驱动的语言,应用与客户端. - 基于对象: ** 提供好了很多对象,可以直接拿过来使用 - 事件驱动: ** html做网站静态效果,javascr ...

  7. 关于在SharePoint2013中弹出模态化窗口的问题及关闭事件。

    js: /*弹出对话框方法开始*//** 弹窗方法(需要回传值时,自定义回调方法)* @url: 弹出窗口页面url* @width: 宽度* @height: 高度* @callback: 回调函数 ...

  8. mmap的使用

    http://blog.csdn.net/adcxf/archive/2009/03/14/3989725.aspx 共 享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B ...

  9. HW5.10

    public class Solution { public static void main(String[] args) { int count = 0; for(int i = 1; i < ...

  10. hdoj 1237 简单计算器

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...