转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
将Dcom对象转换成Com+对象的一种办法         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1059 更新时间:2009/4/23 18:29:29

将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相容的线程模型,则你的修改工作量将会更大。

[1] [2]  下一页


[聊天工具]Google Suggest十大妙用  [聊天工具]保驾护航Web迅雷 全新版本给你更多安全
[聊天工具]玩转火狐的Cookie 让火狐狸吃好小甜饼!  [聊天工具]P2P下载的好工具 POCO完全攻略
[聊天工具]横扫一切高价话费 Vbuzzer八分钱国际长途任你打  [聊天工具]众人拾柴火焰高 改进迅雷于不经意间 迅雷
[聊天工具]中英文互翻 Google Toolbar4中文版试用手记  [聊天工具]巧用µTorrent 体验国外下载站的乐趣
[聊天工具]可远程搜索桌面—Google Desktop 3全新体验  [聊天工具]腾讯浏览器 TT 之实用技巧荟萃 TT,技巧荟萃
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台