NetBox 2.7 使用手册

创建全局的脚本部件

出于性能等多方面考虑,NetBox 是在宿主线程内创建脚本部件的,对脚本部件的访问全部在一个线程内完成。这样的实现,在很大程度上提高了程序运行速度,也符合绝大多数应用的需求,大部分应用都是在一个线程中完成对象的创建,对象的使用,和对象的销毁的。

由于这样的实现方式,你将不可能将一个脚本部件作为全局对象使用,以一个流水号生成器为例,我们可能需要一个每次访问都生成一个新的序号,并且能够为所有的 asp 直接访问的对象。此时,直接使用脚本部件就需要比较复杂的部件逻辑。为了满足这种需要全局访问的需求,NetBox 提供了创建全局脚本对象的方法。

要创建全局的脚本部件,可以使用 NetBox 对象的 LoadObject 方法。使用 LoadObject 方法,你可以自行装载一个脚本部件而无须在 NetBox 中注册它。

LoadObject 方法的调用参数中,有一个可选参数 varGlobal,描述为:指定是否在全局线程装载对象,缺省为 False,为私有对象。我们以上面的流水号生成器为例,可能的脚本部件 genid.wsc 代码如下:

<?xml version="1.0"?>
<component>
    <public>
        <method name="GetID"/>
    </public>
    <script language="VBScript">
<![CDATA[

Dim GlobalID
GlobalID = 0

Function GetID
    GlobalID = GlobalID + 1
    GetID = GlobalID
End Function

]]></script>
</component>

上面是一个非常简单的流水号生成器,因为我们将以全局方式装载这个对象,所有的访问都将在一个全局线程中完成,所以不需要考虑多线程访问的问题。

在初始化应用程序时,我们需要装载这个脚本部件到全局,并且将对象保存到全局物体,比如 NetBox 对象或者 Application 对象中,比如在 main.box 中,我们可以这样装载:

Set NetBox("GenID") = LoadObject("genid.wsc", true)

通过上面的装载,我们将可以在任何地方取得这个对象并且直接访问:

id = NetBox("GenID").GetID

通过上面的例子我们可以了解全局脚本部件的使用方法和用处。需要注意的是,所有以全局方式装载的脚本部件都是在同一个全局线程中运行的,所以尽量不要在全局脚本部件中执行耗时较长的操作,比如访问数据库等。

参考

NetBox 对象,LoadObject 方法


版权所有: 2003- 网络盒子