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

时间:2021-05-25

在使用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.

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

引用内容:
JScriptarraysareconsideredtobe"Apartment"COMcomponents.OnlyComponentObjectModel(COM)componentsthataggregatetheFreeThreadedMarshaler(FTM)canbeassignedtoApplicationscopewithinanInternetInformationServer(IIS)5.0ASPpage.Becausean"Apartment"componentcannotaggregatetheFTM(itcannotallowadirectpointertobepassedtoitsclients,unlikea"BothwithFTM"object),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="xbsCache"runat="server"scope="Application"progid="Scripting.Dictionary"></object>
类的实现如下:
复制代码 代码如下:
<scriptlanguage="JScript"runat="server">
/**
Title:cacheoperateclass
Description:operatesystemcache
@Copyright:Copyright(c)2007
@Author:xujiwei
@Website:http://www.xujiwei.cn/
@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时的缓存实现。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章