WEB开发网
开发学院WEB开发综合 MTS管理自动化 阅读

MTS管理自动化

 2006-02-27 11:45:26 来源:WEB开发网   
核心提示:MTS(MicrosoftTransactinServer)是构筑安全、稳定的INTERNET/INTRANET应用的基础,在引进事务的概念后,MTS管理自动化,你不用担心你的应用在崩溃时造成数据的不完整性,在asp中可以方便地应用MTS,才会从数据存储中删除Bank.CreateTable组件,如果安装成功,你可以编
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->

Tags:MTS 管理 自动化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接