仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 825|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网页设计在ASP与ASP.NET之间共享对话形态(1)

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 23:34:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。asp.net[媒介:]ASP.NET是微软供应的最新的开辟基于Web的使用程序的手艺。它供应了大批的比传统ASP剧本手艺的优点,包含:

  1)经由过程把UI体现层(presentation)与贸易逻辑(businesslogic)分隔创建了更好的开辟布局;

  2)利用完整编译的代码取代了传统ASP的代码翻译;

  3)它编译特征与每一个撑持的办法协同,这意味着利用ASP.NET的站点比利用传统的ASP站点的功能更高。

  只管把存在的ASP使用程序转换到ASP.NET有良多潜伏的优点,也有些ASP使用程序义务很主要而且庞大。转换历程大概必要更多资本并给使用程序带来更多风险。办理这些成绩的路子之一是同时运转ASP和ASP.NET使用程序,在一个时候将一个对话转换为ASP.NET。为了同时运转新旧程序,必要创建一个机制在传统的ASP与ASP.NET间共享对话形态。本文会商的是如何利用.NET框架组件的类和序列化特征共享形态信息。

  概述

  Cookie是Web使用程序辨认用户对话的最经常使用的办法,能够用于辨认传统的ASP和ASP.NET对话形态。在ASP剧本中形态信息保留在内存中,不克不及与别的使用程序(比方ASP.NET)共享。假如对话形态利用通用格局保留在微软SQLServer中,它就能够被传统的ASP和ASP.NET配合会见。

  在本例中,名为mySession的Cookie用于辨认用户对话。当用户对Web使用程序作出哀求时,将为该用户发生独一的Cookie用于辨认对话。在随后的哀求中,扫瞄器将该独一的Cookie发送回服务器用来辨认对话。在被哀求的Web页载进前,一个自界说工具将利用该独一的Cookie从SQLServer中从头载进用户对话数据。经由过程自界说工具Web页中的对话形态是能够会见的。Web哀求完成后,假如哀求停止,对话数据将保留回SQLServer(见)。

.数据流复杂图

  ASP.NET完成

  在ASP.NET中每个Web页都衍生自System.Web.UI.Page类。Page类汇合了HttpSession工具的一个实例用于处置对话数据。在本例中,叫做SessionPage的自界说Page类来衍生自System.Web.UI.Page,供应了相似Page类的一切特征。独一的区分是默许的HttpSession利用自界说的对话工具重载了(对实例变量利用new修正符,C#同意衍生的类埋没基类的成员)。


publicclassSessionPage:System.Web.UI.Page
{
 ...
 publicnewmySessionSession=null;
 ...
}

  自界说的对话类利用HybridDictionary工具来响应保留内存中的对话形态(HybridDictionary可用于处置恣意数目的对话元素)。为了与传统的ASP通用,该自界说对话工具将限定对话数据范例为字符串型(默许的HttpSession同意对话保留恣意范例的数据,不克不及与传统的ASP通用)。


[Serializable]
publicclassmySession
{
 privateHybridDictionarydic=newHybridDictionary();

 publicmySession()
 {
 }

 publicstringthis[stringname]
 {
  get
  {
   return(string)dic[name.ToLower()];
  }
  set
  {
   dic[name.ToLower()]=value;
  }
 }
}


  Page类为定制表露了分歧的事务和办法。出格是OnInit办法用于设置Page工具的初始化形态。假如哀求不包括名为mySession的Cookie,将为哀求者发生一个新的mySessionCookie。别的,对话数据将利用自界说数据会见工具SessionPersistence从SQLServer中检索出来。DSN和SessionExpiration的值从web.config中检索。


overrideprotectedvoidOnInit(EventArgse)
{
 InitializeComponent();
 base.OnInit(e);
}
privatevoidInitializeComponent()
{
 cookie=this.Request.Cookies[sessionPersistence.SessionID];

 if(cookie==null)
 {
  Session=newmySession();
  CreateNewSessionCookie();
  IsNewSession=true;
 }
 else
  Session=sessionPersistence.LoadSession(
    Server.UrlDecode(cookie.Value).ToLower().Trim(),
    dsn,
    SessionExpiration
   );

  this.Unload+=newEventHandler(this.PersistSession);
}
privatevoidCreateNewSessionCookie()
{
 cookie=newHttpCookie(sessionPersistence.SessionID,
 sessionPersistence.GenerateKey());
 this.Response.Cookies.Add(cookie);
}


  SessionPersistence类利用微软.NET框架组件的BinaryFormatter来串行化和并行化对话形态为二进制格局以供应最好功能。了局的二进制对话数据接着作为图像字段范例被存进SQLServer。


publicmySessionLoadSession(stringkey,stringdsn,
intSessionExpiration)
{
 SqlConnectionconn=newSqlConnection(dsn);
 SqlCommandLoadCmd=newSqlCommand();
 LoadCmd.CommandText=command;
 LoadCmd.Connection=conn;
 SqlDataReaderreader=null;
 mySessionSession=null;

 try
 {
  LoadCmd.Parameters.Add("@ID",newGuid(key));
  conn.Open();
  reader=LoadCmd.ExecuteReader();
  if(reader.Read())
  {
   DateTimeLastAccessed=reader.GetDateTime(1).AddMinutes(SessionExpiration);
   if(LastAccessed>=DateTime.Now)
    Session=Deserialize((Byte[])reader["Data"]);
  }
 }
 finally
 {
  if(reader!=null)
   reader.Close();
  if(conn!=null)
   conn.Close();
 }

 returnSession;
}
privatemySessionDeserialize(Byte[]state)
{
 if(state==null)returnnull;

 mySessionSession=null;
 Streamstream=null;

 try
 {
  stream=newMemoryStream();
  stream.Write(state,0,state.Length);
  stream.Position=0;
  IFormatterformatter=newBinaryFormatter();
  Session=(mySession)formatter.Deserialize(stream);
 }
 finally
 {
  if(stream!=null)
   stream.Close();
 }
 returnSession;
}


  在哀求的开端,Page类的Unload事务被启动了,一个同Unload事务一同注册的事务处置办法将串行化对话数据为二进制格局并将了局二进制数据存进SQLServer。


privatevoidPersistSession(Objectobj,System.EventArgsarg)
{sessionPersistence.SaveSession(
  Server.UrlDecode(coo</p>对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-20 09:58:48 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
老尸 该用户已被删除
板凳
发表于 2015-1-29 06:43:34 来自手机 | 只看该作者
还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。
若天明 该用户已被删除
地板
发表于 2015-2-5 23:27:57 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
再见西城 该用户已被删除
5#
发表于 2015-2-14 05:16:24 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
因胸联盟 该用户已被删除
6#
发表于 2015-3-4 04:47:27 | 只看该作者
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
莫相离 该用户已被删除
7#
发表于 2015-3-11 16:56:06 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
简单生活 该用户已被删除
8#
发表于 2015-3-19 02:26:25 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
9#
发表于 2015-3-27 05:10:26 | 只看该作者
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-28 17:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表