| MTS管理自动化 |
| 来源: 作者: 发布时间:2007-04-29
|
|
MTS(MicrosoftTransactinServer)是构筑安全、稳定的INTERNET/INTRANET应用的基础,在引进事务的概念后,你不用担心你的应用在崩溃时造成数据的不完整性。 在ASP中可以方便地应用MTS,你可以编写支持MTS的组件,然后注册到MTS中。前提是你必须启动DTC(分布式事务管理器)服务。注册MTS组件是个比较麻烦的过程,特别是当你必须在多台机器上进行的时候,但幸亏MTS提供了管理对象,你可以通过编写简单的程序来自动地注册。下面这段拷自MTS文档:
MTS管理自动化的VisualBasic示例应用程序
VisualBasic5.0版的示例应用程序演示了如何使用Catalog、CatalogObject以及CatalogCollections对象的方法来自动完成对一个名为““脚本化的管理示例”的软件包的基本管理功能。
注意必须将您的VisualBasic工程配置为可以引用MTS管理类型库(MTSAdmin类型库)。要引用MTSAdmin类型库,请从VisualBasic工程工具栏中选择“引用”选项。然后查找“MTS2.0管理类型库”可引用文件。对于后期绑定的变量(在运行程序时才绑定),如果MTXADMIN.DLL文件已在本地机器上注册,则VisualBasic只记录类型库的位置,而不进行进一步的配置。
删除已有的名为“ScriptableAdminDemo”的软件包
调用CreateObject方法实例化目录对象。
DimcatalogAsObject Setcatalog=CreateObject("MTSAdmin.Catalog.1") 调用GetCollection方法获取一个Packages集合对象。返回的Packages集合不从目录取得任何数据,因此从GetCollection方法返回的集合是空的。
DimpackagesAsObject Setpackages=catalog.GetCollection("Packages") 填充这个Packages集合,读入所有软件包并查找“ScriptableAdminDemo”软件包,从而获得该软件包的已有版本。枚举该集合,在最高索引开始,就可以在循环内部调用Remove方法。Remove方法负责释放该对象,从集合中删除该对象,以及移动集合中的对象,使第(n 1)个对象变为第(n)个对象,这里的n大于或等于正在被删除的索引。集合对象的Remove方法是立即生效的。在Remove方法之后的任何时刻调用Item和Count方法都将反映出索引的变化。不过,对软件包的删除要直到调用SaveChanges方法后才会反映到目录上(请参阅第4步)。
packages.Populate DimpackAsObject n=packages.Count Fori=n-1To0Step-1 Ifpackages.Item(i).Value("Name")="ScriptableAdminDemo"Then packages.Remove(i) EndIf Next 调用SaveChanges方法来保存对数据的更改。
packages.SaveChanges
》创建一个新的名为“ScriptableAdminDemo”的软件包
使用Add方法添加一个软件包,注意要指定软件包标识符。Add方法将该对象添加到集合,但要到调用SaveChanges方法后才会将该变化应用到目录(请参阅第3步)。注意Add方法将把所有属性设为默认值。默认的标识符是一个新的具唯一性的标识符。
DimnewPackAsObject DimnewPackIDAsVariant SetnewPack=packages.Add newPackID=newPack.Value("ID")
》更新Name和SecurityEnabled属性。
newPack.Value("Name")="ScriptableAdminDemo" newPack.Value("SecurityEnabled")="N" 调用SaveChanges方法将这个新的软件包保存到目录。该调用的返回值是更改、添加或删除的对象数目。如果没有发生改变,该方法返回0。
n=packages.SaveChanges 更新“ScriptableAdminDemo”软件包的属性以及获取ComponentsInPackage集合。
调用PopulateByKey方法,从目录读入该软件包。这需要传递一个包含用来读入的关键字的数组。在示例代码中,使用了一个包含单个元素(刚创建的软件包的标识符)的数组。
Dimkeys(0)asVariant keys(0)=newPackId packages.PopulateByKeykeys 从集合中获取该软件包对象
DimpackageAsObject Setpackage=packages.Item(0) 更新软件包的SecurityEnabled属性。
package.Value("SecurityEnabled")="Y" 调用GetCollection方法来取得ComponentsInPackage集合。将“ScriptableAdminDemo”软件包的关键字作为其中一个参数。
Setcomponents=packages.GetCollection("ComponentsInPackage",_package.Key) 调用SaveChanges方法将更改保存到目录。
packages.SaveChanges
》安装一个组件到“ScriptableAdminDemo”软件包:
调用GetUtilInterface方法来获取组件实用程序对象。一般使用该对象来安装组件。
DimutilAsObject Setutil=components.GetUtilInterface OnErrorGoToinstallFailed 调用InstallComponent方法,用一个字符串传递包含要安装组件的动态链接库(DLL)的名字。如果该组件没有一个外部类型库或proxy-stubDLL,则传递一个空字符串作为第二个和第三个参数。注意,在安装一个新组件之后,不必调用SaveChanges方法。InstallComponent方法将安装DLL中包含的所有组件,且这些组件被立即写入到目录。可以调用GetCLSIDs方法来获取所安装的组件的类标识符。
Form2.Show1 DimthePathAsString thePath=Form2.MTSPath "\samples\packages\vbacct.dll" util.InstallComponentthePath,"","" DiminstalledCLSIDs()asVariant util.GetCLSIDsthePath,"",installedCLSIDs OnErrorGoTo0 调用PopulateByKey方法读回刚安装的组件。注意通过InstallComponent方法安装到软件包的组件在调用Populate或PopulateByKey方法从该目录中读回数据之前,在集合中是不可见的。
components.PopulateByKeyinstalledCLSIDs
》从“ScriptableAdminDemo”软件包中查找并删除Bank.CreateTable组件:
逐个列枚组件,并使用Item和Count方法更改事务属性。
DimcomponentAsObject n=components.Count Fori=n-1To0Step-1 Setcomponent=components.Item(i) component.Value("Transaction")="Required" 按索引查找并删除Bank.CreateTable组件。注意,为了在循环中能调用Remove方法,必须向后逐个枚举集合中的对象。
Ifcomponent.Value("ProgID")="Bank.CreateTable"Then components.Remove(i) EndIf Next 取得一个新的计数,并再次枚举集合。注意要到调用SaveChanges方法后,才会从数据存储中删除Bank.CreateTable组件。如果安装成功,则显示一个消息框通知用户。
n=components.Count Fori=0Ton-1 Setcomponent=components.Item(i) Debug.Printcomponent.Value("ProgID") Debug.Printcomponent.Value("DLL") Next
n=components.SaveChanges MsgBox"ScriptableAdminDemopackageinstalledandconfigured." ExitSub
installFailed: MsgBox"Errorcode" Str$(Err.Number) "installing" thePath "MakesuretheMTSpathyouenterediscorrectandthatvbacct.dllisnotalreadyinstalled." EndSub->
|
| |
|
| 上一篇:用OLE自动化Outlook 下一篇:VB中使用数据窗体设计器插件 |
|
【关闭窗口】 |
|
|
|