|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的;asp.netASP完成
本来的ASP对话只能将对话数据保留在内存中。为了将对话数据保留到SQLServer,必要写一个自界说的VisualBasic6.0COM工具取代如今的对话工具来办理对话形态。该COM工具在每一个Web哀求入手下手时被初始化,并从SQLServer从头载进对话数据。ASP剧本完成时,该工具将停止并把对话形态将前往到SQLServer。
VisualBasic6COMSession工具的次要目标是供应对微软Internet信息服务器(IIS)外部工具的会见。VisualBasic6COM对话工具利用SessionUtility组件的mySession类来保留对话形态,SessionUtility的SessionPersistence类用于载进和保留对话数据到SQLServer。利用regasm.exe工具将mySession和SessionPersistence类作为COM工具表露。regasm.exe工具能够注册并为COM客户端创建一个范例库来利用框架组件类。
在工具的机关函数中形态信息被从头载进。机关函数(class_initialize)起首从Application工具中检索对话cookie、对话超时设置(SessionTimeOut)、数据库毗连字符串(SessionDSN),并创建mySession类的一个实例来坚持对话数据。接着机关函数将试图从头利用给定的cookie从SQLServer中载进对话数据。假如SQLServer中没有对话信息,大概对话已停止,将发生一个新的cookie。假如SQLServer前往了对话形态数据,对话形态信息将保留在mySession工具中。
PrivateSubClass_Initialize()
OnErrorGoToErrHandler:
ConstMETHOD_NAMEAsString="Class_Initialize"
SetmySessionPersistence=NewSessionPersistence
SetmyObjectContext=GetObjectContext()
mySessionID=ReadSessionID()
myDSNString=GetConnectionDSN()
myTimeOut=GetSessionTimeOut()
myIsNewSession=False
CallInitContents
ExitSub
ErrHandler:
Err.RaiseErr.Number,METHOD_NAME&":"&Err.Source,Err.Description
EndSub
PrivateSubInitContents()
OnErrorGoToErrHandler:
ConstMETHOD_NAMEAsString="InitContents"
IfmySessionID=""Then
SetmyContentsEntity=NewmySession
mySessionID=mySessionPersistence.GenerateKey
myIsNewSession=True
Else
SetmyContentsEntity=mySessionPersistence.LoadSession(mySessionID,myDSNString, myTimeOut)
EndIf
ExitSub
ErrHandler:
Err.RaiseErr.Number,METHOD_NAME&":"&Err.Source,Err.Description
EndSub
假如工具实例超越了剧本的局限,将实行解构函数(class_terminate)。解构函数将利用SessionPersistence.SaveSession()办法坚持对话数据。假如是一个新对话,解构函数将新cookie发送回扫瞄器。
PrivateSubClass_Terminate()
OnErrorGoToErrHandler:
ConstMETHOD_NAMEAsString="Class_Terminate"
CallSetDataForSessionID
ExitSub
ErrHandler:
Err.RaiseErr.Number,METHOD_NAME&":"&Err.Source,Err.Description
EndSub
PrivateSubSetDataForSessionID()
OnErrorGoToErrHandler:
ConstMETHOD_NAMEAsString="SetDataForSessionID"
CallmySessionPersistence.SaveSession(mySessionID,
myDSNString,myContentsEntity,myIsNewSession)
IfmyIsNewSessionThenCallWriteSessionID(mySessionID)
SetmyContentsEntity=Nothing
SetmyObjectContext=Nothing
SetmySessionPersistence=Nothing
ExitSub
ErrHandler:
Err.RaiseErr.Number,METHOD_NAME&":"&Err.Source,Err.Description
EndSub
例程
例程计划为增添并显现一个数字。不论载进了哪一个页面,因为数字值保留在SQLServer中并在ASP和ASP.NET间共享,数字将不休增添。
创建例程的步骤
1.创建一个新数据库SessionDemoDb。
2.创建新表SessState(osql.exe-E-dSessionDemoDb-iSession.sql)。
3.创建新假造目次Demo。
4.在ASP设置页中封闭ASP对话。
5.将web.config、testPage.aspx、Global.asa、testPage.asp和GlobalInclude.asp复制到假造目次。
6.更新Global.asa和web.config中的DSN字符串设置。对话超时设置是可选的,默许为20分钟。
7.将SessionUtility.dll安装到全局组件缓存(gacutil/iSessionUtility.dll)。
8.利用regasm.exe把SessionUtility.dll作为COM工具表露(regasm.exeSessionUtility.dll/tlb:SessionUtility.tlb)。
9.将SessionManager.dll复制到当地目次并利用regsvr32.exe注册(regsvr32SessionManager.dll)。
10.付与IUSR_<盘算机名>帐户读取和运转会见SessionMgr.dll的权限。
运转例程的步骤
1.翻开微软InternetExplorer。
2.为传统的ASP中载进testPage.asp。数字"1"将呈现在Web页中。
3.点击InternetExplorer的革新来从头载进该页面。数字将增添。
4.为ASP.NET改动URL为testPage.aspx。数字仍旧增添。
5.假如利用testPage.aspx入手下手,历程不异。
在存在的ASP使用程序中拔出COM工具
开辟ASP使用程序的一个一般的习气是在每一个剧本入手下手时包括一个文件来共享代码和常量。拔出自界说对话工具的最初路子是在私有包括文件中到场示例代码。最初一步复杂地利用自界说对话变量名取代了一切到对话工具的援用。
限定/改善
本计划不撑持在Session工具中保留了COM工具的ASP使用程序。在这类情形下,为了利用自界说对话工具,必要一个自界说的调剂器来串行化/并行化形态。别的,本计划也不撑持保留字符串范例数组。做一些附加事情能够完成该特征:利用VisualBasic6.0的Join函数在保留到对话工具前将数组元素毗连成一个字符串,反向操纵可使用VisualBasic6.0的Split函数将字符串分化为自力的数组元素。在.NET框架组件中,Join和Split办法使String类的成员。
结论
ASP.NET提出了新的编程典范和系统布局,并供应了很多比传统ASP的优点。只管将ASP移植到ASP.NET的历程不复杂,ASP.NET更好的编程模子和更高的功能将使转换历程值得。除在Session工具中保留COM工具的惯例,本文会商的路子供应了一个复杂完成迁徙的办理计划。
</p>实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。 |
|