加入收藏
联系我们
关于我们
 您现在的位置: 亿聪 >> 网络学院 >> 网络编程 >> ASP >> 正文  
  在ASP与ASP.NET之间共享对话状态         ★★★
在ASP与ASP.NET之间共享对话状态
[ 作者:    转贴自:开发者俱乐部    点击数:53837    更新时间:2003/8/29    文章录入:亿聪 ]
 SqlCommand SaveCmd = new SqlCommand();
 SaveCmd.Connection = conn;

 try
 {
  if (IsNewSession)
   SaveCmd.CommandText = InsertStatement;
  else
   SaveCmd.CommandText = UpdateStatement;

  SaveCmd.Parameters.Add("@ID", new Guid(key));
  SaveCmd.Parameters.Add("@Data", Serialize(Session));
  SaveCmd.Parameters.Add("@LastAccessed", DateTime.Now.ToString());

  conn.Open();
  SaveCmd.ExecuteNonQuery();
 }
 finally
 {
  if (conn != null)
   conn.Close();
 }
}
private Byte[] Serialize(mySession Session)
{
 if (Session == null) return null;

 Stream stream = null;
 Byte[] state = null;

 try
 {
  IFormatter formatter = new BinaryFormatter();
  stream = new MemoryStream();
  formatter.Serialize(stream, Session);
  state = new Byte[stream.Length];
  stream.Position = 0;
  stream.Read(state, 0, (int)stream.Length);
  stream.Close();
 }
 finally
 {
  if (stream != null)
   stream.Close();
 }
 return state;
}



  SessionPage类以及与它相关的类被封装在SessionUtility组件中。在一个新ASP.NET项目中,需要作SessionUtility组件的引用,为了与传统的ASP代码共享对话,每个页面由SessionPage代替Page类衍生出来。一旦移植完成了,新应用程序能通过说明SessionPage类中定义的对话变量切换回使用原来的HttpSession对象来显示基本的HttpSession。
ASP实现

  原来的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()

上一页  [1] [2] [3] [4] [5]  下一页

  • 上一篇文章: ASP 3.0高级编程(四十六)

  • 下一篇文章: ASP中常用的文件处理函数
  • 发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • Knoppix 4.0.2 免硬盘免安…[15797]

  • 通过ASP记录进行分页[20012]

  • ASP开发准则[11932]

  • ASP组件指南[11943]

  • ASP指南[11968]

  •  
     最新5篇推荐文章
  • Knoppix 4.0.2 免硬盘免安…[15797]

  • 如何让Win 2003系统更加安…[13301]

  • Nero超刻简明教程[34139]

  • PS商业实战-来杯茶,行吗?…[7255]

  • ASP深度揭密(下)[12555]

  •  
     相 关 文 章
    没有相关文章

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 关于我们 | 联系我们 | 友情链接 | 版权声明 | 管理登录
    Copyright © 2000-2022 Yicong.com.All Rights Reserved.
    亿聪 版权所有 E-mail: