|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。 |
|