在JScript中使用缓存技术的实际代码

2018-09-06 10:30

阅读:774

  在使用VBScript时,我们可以用Application缓存数组来实现缓存,例:

程序代码:
复制代码 代码如下:
Dimrs,arr
rs.Openconn,sql,1,1
arr=rs.GetRows()
Application.Lock()
Application(cache)=arr
Applicatoin.UnLock()

在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我们在使用Application储存一个数组时,会出现以下错误:

引用内容:
Applicationobject,ASP0197(0x80004005)

Disallowedobjectuse

Cannotaddobjectwithapartmentmodelbehaviortotheapplicationintrinsicobject.

在微软的知识库可以找到具体原因如下:

引用内容:
JScriptarraysareconsideredtobeApartmentCOMcomponents.OnlyComponentObjectModel(COM)componentsthataggregatetheFreeThreadedMarshaler(FTM)canbeassignedtoApplicationscopewithinanInternetInformationServer(IIS)5.0ASPpage.BecauseanApartmentcomponentcannotaggregatetheFTM(itcannotallowadirectpointertobepassedtoitsclients,unlikeaBothwithFTMobject),JScriptarraysdonotaggregatetheFTM.Therefore,JScriptarrayscannotbeassignedtoApplicationscopefromanASPpage.

以上描述引用自:PRB:ErrorWhenYouStoreaJScriptArrayinApplicationScopeinIIS5.0

因此,为了解决这个问题,在Google里找了一大会,终于找到了一篇文章《Application对象的Contents和StaticObjects做Cache的一些结论》,解决了这个问题,方法就是使用Application.StaticObject存放一个Scripting.Dictionary对象,然后再使用Scripting.Dictionary对象来存放需要缓存的数据。

据此,写了一个操作缓存的类,实现put、get、remove和clear方法,使用之前,需要在global.asa中添加一个object:

程序代码:
<objectid=xbsCacherunat=serverscope=Applicationprogid=Scripting.Dictionary></object>
类的实现如下:
复制代码 代码如下:
<scriptlanguage=JScriptrunat=server>
/**
Title:cacheoperateclass
Description:operatesystemcache
@Copyright:Copyright(c)2007
@Author:xujiwei
@Website:
@Version:1.0
@Time:2007-06-2912:03:45
**/
varxbsCache={
get:function(key){
returnApplication.StaticObjects(xbsCache).Item(Cache.+key);
},
put:function(key,data){
Application.Lock();
Application.StaticObjects(xbsCache).Item(Cache.+key)=data;
Application.UnLock();
},
remove:function(key){
Application.Lock();
Application.StaticObjects(xbsCache).Remove(Cache.+key);
Application.UnLock();
},
clear:function(){
Application.Lock();
Application.StaticObjects(xbsCache).RemoveAll();
Application.UnLock();
}
}
</script>
如此,就完成了ASP中使用JScript时的缓存实现。


评论


亲,登录后才可以留言!