王朝网络
分享
 
 
 

MTS管理自动化

王朝other·作者佚名  2006-12-16
宽屏版  字体: |||超大  

MTS(Microsoft Transactin Server)是构筑安全、稳定的INTERNET/INTRANET应用的基础,在引进事务的概念后,你不用担心你的应用在崩溃时造成数据的不完整性。

在ASP中可以方便地应用MTS,你可以编写支持MTS的组件,然后注册到MTS中。前提是你必须启动DTC(分布式事务管理器)服务。注册MTS组件是个比较麻烦的过程,特别是当你必须在多台机器上进行的时候,但幸亏MTS提供了管理对象,你可以通过编写简单的程序来自动地注册。下面这段拷自MTS文档:

MTS 管理自动化的 Visual Basic 示例应用程序

Visual Basic 5.0 版的示例应用程序演示了如何使用 Catalog、CatalogObject 以及 CatalogCollections 对象的方法来自动完成对一个名为““脚本化的管理示例”的软件包的基本管理功能。

注意 必须将您的 Visual Basic 工程配置为可以引用 MTS 管理类型库(MTSAdmin 类型库)。要引用 MTSAdmin 类型库,请从 Visual Basic 工程工具栏中选择“引用”选项。然后查找“MTS 2.0 管理类型库”可引用文件。对于后期绑定的变量(在运行程序时才绑定),如果 MTXADMIN.DLL 文件已在本地机器上注册,则 Visual Basic 只记录类型库的位置,而不进行进一步的配置。

删除已有的名为“Scriptable Admin Demo”的软件包

调用 CreateObject 方法实例化目录对象。

Dim catalog As Object

Set catalog = CreateObject("MTSAdmin.Catalog.1")

调用 GetCollection 方法获取一个 Packages 集合对象。返回的 Packages 集合不从目录取得任何数据,因此从 GetCollection 方法返回的集合是空的。

Dim packages As Object

Set packages = catalog.GetCollection("Packages")

填充这个 Packages 集合,读入所有软件包并查找“Scriptable Admin Demo”软件包,从而获得该软件包的已有版本。枚举该集合,在最高索引开始,就可以在循环内部调用 Remove 方法。Remove 方法负责释放该对象,从集合中删除该对象,以及移动集合中的对象,使第 (n+1) 个对象变为第 (n) 个对象,这里的 n 大于或等于正在被删除的索引。集合对象的 Remove 方法是立即生效的。在 Remove 方法之后的任何时刻调用 Item 和 Count 方法都将反映出索引的变化。不过,对软件包的删除要直到调用 SaveChanges 方法后才会反映到目录上(请参阅第 4步)。

packages.Populate

Dim pack As Object

n = packages.Count

For i = n - 1 To 0 Step -1

If packages.Item(i).Value("Name") = "Scriptable Admin Demo" Then

packages.Remove (i)

End If

Next

调用 SaveChanges 方法来保存对数据的更改。

packages.SaveChanges

》创建一个新的名为“Scriptable Admin Demo”的软件包

使用 Add 方法添加一个软件包,注意要指定软件包标识符。Add 方法将该对象添加到集合,但要到调用 SaveChanges 方法后才会将该变化应用到目录(请参阅第 3 步)。注意 Add 方法将把所有属性设为默认值。默认的标识符是一个新的具唯一性的标识符。

Dim newPack As Object

Dim newPackID As Variant

Set newPack = packages.Add

newPackID = newPack.Value("ID")

》更新 Name 和 SecurityEnabled 属性。

newPack.Value("Name") = "Scriptable Admin Demo"

newPack.Value("SecurityEnabled") = "N"

调用 SaveChanges 方法将这个新的软件包保存到目录。该调用的返回值是更改、添加或删除的对象数目。如果没有发生改变,该方法返回 0。

n = packages.SaveChanges

更新“Scriptable Admin Demo”软件包的属性以及获取 ComponentsInPackage 集合。

调用 PopulateByKey 方法,从目录读入该软件包。这需要传递一个包含用来读入的关键字的数组。在示例代码中,使用了一个包含单个元素(刚创建的软件包的标识符)的数组。

Dim keys(0) as Variant

keys(0) = newPackId

packages.PopulateByKey keys

从集合中获取该软件包对象

Dim package As Object

Set package = packages.Item(0)

更新软件包的 SecurityEnabled 属性。

package.Value("SecurityEnabled") = "Y"

调用 GetCollection 方法来取得 ComponentsInPackage 集合。将“Scriptable Admin Demo”软件包的关键字作为其中一个参数。

Set components = packages.GetCollection("ComponentsInPackage",_ package.Key)

调用 SaveChanges 方法将更改保存到目录。

packages.SaveChanges

》安装一个组件到“Scriptable Admin Demo”软件包:

调用 GetUtilInterface 方法来获取组件实用程序对象。一般使用该对象来安装组件。

Dim util As Object

Set util = components.GetUtilInterface

On Error GoTo installFailed

调用 InstallComponent 方法,用一个字符串传递包含要安装组件的动态链接库 (DLL) 的名字。如果该组件没有一个外部类型库或 proxy-stub DLL,则传递一个空字符串作为第二个和第三个参数。注意,在安装一个新组件之后,不必调用 SaveChanges 方法。InstallComponent 方法将安装 DLL 中包含的所有组件,且这些组件被立即写入到目录。可以调用 GetCLSIDs 方法来获取所安装的组件的类标识符。

Form2.Show 1

Dim thePath As String

thePath = Form2.MTSPath + "\samples\packages\vbacct.dll"

util.InstallComponent thePath, "", ""

Dim installedCLSIDs() as Variant

util.GetCLSIDs thePath, "", installedCLSIDs

On Error GoTo 0

调用 PopulateByKey 方法读回刚安装的组件。注意通过 InstallComponent 方法安装到软件包的组件在调用 Populate 或 PopulateByKey 方法从该目录中读回数据之前,在集合中是不可见的。

components.PopulateByKey installedCLSIDs

》从“Scriptable Admin Demo”软件包中查找并删除 Bank.CreateTable 组件:

逐个列枚组件,并使用 Item 和 Count 方法更改事务属性。

Dim component As Object

n = components.Count

For i = n - 1 To 0 Step -1

Set component = components.Item(i)

component.Value("Transaction") = "Required"

按索引查找并删除 Bank.CreateTable 组件。注意,为了在循环中能调用 Remove 方法,必须向后逐个枚举集合中的对象。

If component.Value("ProgID") = "Bank.CreateTable" Then

components.Remove (i)

End If

Next

取得一个新的计数,并再次枚举集合。注意要到调用 SaveChanges 方法后,才会从数据存储中删除 Bank.CreateTable 组件。如果安装成功,则显示一个消息框通知用户。

n = components.Count

For i = 0 To n - 1

Set component = components.Item(i)

Debug.Print component.Value("ProgID")

Debug.Print component.Value("DLL")

Next

n = components.SaveChanges

MsgBox "Scriptable Admin Demo package installed and configured."

Exit Sub

installFailed:

MsgBox "Error code " + Str$(Err.Number) + "installing " + thePath + " Make sure the MTS path you entered is correct and that vbacct.dll is not already installed."

End Sub

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有