分享
 
 
 

将Dcom对象转换成Com+对象的一种办法

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

将Dcom对象转换成Com+对象的一种办法

升级到sp2后,基于充分利用Windows xp sp2安全功能方面的考虑,本人近期开始将原有的DCOM应用向Com+环境转移。现将本人转移过程中出现的问题及解决办法,介绍如下,请方家指正:

一、原DCOM应用的结构:

我用DELPHI IDE的向导正常生成一个远程数据模块(RdbDBSvr),并在其中放入AdoDataset,Adoquery等数据集控件,建立接口方法,对外Export方法接口,为客户端提供数据查询功能,该服务器采用独立运行的进程外服务模式。客户端则利用Dcomconnection来连接此远程数据模块。总之是一个在DELPHI中创建的标准的C/S应用程序。

需要说明的是在设计RdbDBSvr时,为保持未来的代码重用,其中没有加入直接引用主窗体变量的引用,一些为了同步线程设置的变量,我均将其放入了一个公用变量单元中。同时,同时我还尽量使用方法而不是直接使用PRovider控件来为客户提供数据。事实证明,这种设计减轻了DCOM向COM+对象转换的复杂程度,而且应该说是相当方便的。

在客户端,我则通过公用变量引入远程数据模块的IAppServer接口,并在大部分的代码中引用这一公用变量并调用方法。也就是说,代码中没有加入对特定远程数据提供者的直接引用。

二、现在我们对服务器进行转换。

DCOM对象向COM+对象转换前,我事实上运用了一个事实:就是DELPHI中无论是RemoteDataMoudel还是MTSDataMoudle,都实现了IAppServer接口,并归入Borland DataSnap Applacation server Catlog中。因此无论是MTS对象,不是DCOM对象,在使用DcomConnection控制找远程数据提供者(Remote data provider)时,都会在列表中出现。

(一) 方法一

1、用DELPHI IDE创建一个新的Transactional data moudle,并将其放入一个单独的ActiveX DLL中。

2、打开原DCOM服务器中的远程数据模块,选择其中的全部控件,并将其拷贝到你新创建的MTS数据模块中,这样你原远程数据模块中所有控件的属性都被原样复制过来了。这一步是为下一步得用DCOM远程数据模块代码做了必要准备。

3、打开Type library编辑器,将原DCOM服务器的类型库加入到引用列表中,并将新的MTS数据模块的Parent interface改成DCOM服务器中远程数据模块实现的接口。然后刷新类型库。

4、此时你的MTS接口实现单元中,将会自动加入原DCOM远程数据模块的接口声明,并加入实现代码的框架。

TDemo = class(TMtsDataModule, IDemo)

private

{ Private declarations }

protected

class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;

//以下是我的原远程数据模块的接口表,DELPHI自动将其复制到此单元中,并且生成了代码框架

procedure FindPersons(const Name, UnitNo: WideString;

out RDataset: OleVariant); safecall;

procedure GetFieldsName(const TBName: WideString; out FDNames: OleVariant);

safecall;

procedure GetLaborage(const PersonNo: WideString; out Records: OleVariant);

safecall;

procedure GetOtherInfo(const TableName, PersonNo: WideString;

……

public

{ Public declarations }

end;

……

procedure TDemo.FindPersons(const Name, UnitNo: WideString;

out RDataset: OleVariant);

begin

end;

……

5、现在,返回到原DCOM远程数据模块的实现单元,将其方法的具体实现代码复制到此单元。并将复制代码中的原DCOM对象的类名替换成MTS对象的类名。同时注意:如果原DOCM远程数据模块引用了公用单元(如我自己引用的公用变量单元),将你还需将引用的公用单元加入到USER列表中。

6、至此,你的与DCOM数据模块相同功能的MTS数据模块完全实现,请编译并注册该MTS对象。

三、客户端:

打开你的客户端应用程序源代码,并打开客户端数据模块中的DCOMConnection对象的ServerName属性列表,此时,你将可以看到MTS对象出现在了列表中,选择它,并重新编译你的客户应用程序。如果你在客户端代码中没有加入对ServerName的引用硬编码,则你将看到客户端不需任何改变就能够正常运行,而此时它引用的已不是DCOM对象而是运行在COM+环境中的MTS对象。为证实这一点,你可以运行DCOMCNFG。在本地计算机中“正在运行的进程”列表中,你将看到MTS正在欢快的旋转。

四、注意的问题:

1、上述方法是将原DCOM 应用服务器的类型库导入到MTS服务器中,再实现类型库中的方法。因此,如果你将新生成的MTS服务器组件发布到其他计算机上,并且没有将原DCOM应用服务器拷贝并注册到该计算机上,将你的客户端将会收到“找不到类型库”的错误提示。解决这一问题的办法是将原DCOM应用服务器的*.tlb文件复制到该计算机上,并用tregsvr.exe –t (server).tlb 来在该计算机上注册类型库(server用你原服务器名代替)。另一种方法是,在编辑MTS对象类型库时,直接引用原服务器的TLB文件,而在分民MTS对象将该TLB文件与MTS包随同分发。

2、以上转换事实上只能对比较简单的DCOM对象进行。如果你的DCOM代码中加入了与后端数据库相关的事务支持代码,则你必须修改其代码,使之使用MTS提供的事务管理功能,这样才能充分发挥MTS资源管理、事务协调的强大功能,当然,如果你的DCOM对象没有使用与MTS相容的线程模型,则你的修改工作量将会更大。

3、在转换成MTS对象后,你就能直接运用MTS基于角色的安全功能,对你的MTS的安全属性实施细微的控制,并且不用增加任何代码,当然如果你的代码中加入了原基于DCOM的特殊安全设定,你可能还要进行微调。但是,COM+会兼容这些安全代码。

4、转换成MTS对象后,建议你重新确定你的COM默认发生的“最低安全限制”属性和你计算机的防火墙设置,以免它停止工作或“拒绝访问”。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有