国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

將Dcom對象轉(zhuǎn)換成Com+對象的一種辦法

2019-11-18 18:10:32
字體:
供稿:網(wǎng)友
將Dcom對象轉(zhuǎn)換成Com+對象的一種辦法
 
 
升級到sp2后,基于充分利用Windows xp sp2安全功能方面的考慮,本人近期開始將原有的DCOM應(yīng)用向Com+環(huán)境轉(zhuǎn)移。現(xiàn)將本人轉(zhuǎn)移過程中出現(xiàn)的問題及解決辦法,介紹如下,請方家指正:
一、原DCOM應(yīng)用的結(jié)構(gòu):
我用DELPHI IDE的向?qū)дI梢粋€遠程數(shù)據(jù)模塊(RdbDBSvr),并在其中放入AdoDataset,Adoquery等數(shù)據(jù)集控件,建立接口方法,對外Export方法接口,為客戶端提供數(shù)據(jù)查詢功能,該服務(wù)器采用獨立運行的進程外服務(wù)模式。客戶端則利用Dcomconnection來連接此遠程數(shù)據(jù)模塊。總之是一個在DELPHI中創(chuàng)建的標準的C/S應(yīng)用程序。
需要說明的是在設(shè)計RdbDBSvr時,為保持未來的代碼重用,其中沒有加入直接引用主窗體變量的引用,一些為了同步線程設(shè)置的變量,我均將其放入了一個公用變量單元中。同時,同時我還盡量使用方法而不是直接使用PRovider控件來為客戶提供數(shù)據(jù)。事實證明,這種設(shè)計減輕了DCOM向COM+對象轉(zhuǎn)換的復(fù)雜程度,而且應(yīng)該說是相當方便的。
在客戶端,我則通過公用變量引入遠程數(shù)據(jù)模塊的IAppServer接口,并在大部分的代碼中引用這一公用變量并調(diào)用方法。也就是說,代碼中沒有加入對特定遠程數(shù)據(jù)提供者的直接引用。
  二、現(xiàn)在我們對服務(wù)器進行轉(zhuǎn)換。
  DCOM對象向COM+對象轉(zhuǎn)換前,我事實上運用了一個事實:就是DELPHI中無論是RemoteDataMoudel還是MTSDataMoudle,都實現(xiàn)了IAppServer接口,并歸入Borland DataSnap Applacation server Catlog中。因此無論是MTS對象,不是DCOM對象,在使用DcomConnection控制找遠程數(shù)據(jù)提供者(Remote data provider)時,都會在列表中出現(xiàn)。
(一)   方法一
1、用DELPHI IDE創(chuàng)建一個新的Transactional data moudle,并將其放入一個單獨的ActiveX DLL中。
 
2、打開原DCOM服務(wù)器中的遠程數(shù)據(jù)模塊,選擇其中的全部控件,并將其拷貝到你新創(chuàng)建的MTS數(shù)據(jù)模塊中,這樣你原遠程數(shù)據(jù)模塊中所有控件的屬性都被原樣復(fù)制過來了。這一步是為下一步得用DCOM遠程數(shù)據(jù)模塊代碼做了必要準備。

3、打開Type library編輯器,將原DCOM服務(wù)器的類型庫加入到引用列表中,并將新的MTS數(shù)據(jù)模塊的Parent interface改成DCOM服務(wù)器中遠程數(shù)據(jù)模塊實現(xiàn)的接口。然后刷新類型庫。






4、此時你的MTS接口實現(xiàn)單元中,將會自動加入原DCOM遠程數(shù)據(jù)模塊的接口聲明,并加入實現(xiàn)代碼的框架。
 
  TDemo = class(TMtsDataModule, IDemo)
  private
    { Private declarations }
  protected
    class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
//以下是我的原遠程數(shù)據(jù)模塊的接口表,DELPHI自動將其復(fù)制到此單元中,并且生成了代碼框架
    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、現(xiàn)在,返回到原DCOM遠程數(shù)據(jù)模塊的實現(xiàn)單元,將其方法的具體實現(xiàn)代碼復(fù)制到此單元。并將復(fù)制代碼中的原DCOM對象的類名替換成MTS對象的類名。同時注意:如果原DOCM遠程數(shù)據(jù)模塊引用了公用單元(如我自己引用的公用變量單元),將你還需將引用的公用單元加入到USER列表中。
6、至此,你的與DCOM數(shù)據(jù)模塊相同功能的MTS數(shù)據(jù)模塊完全實現(xiàn),請編譯并注冊該MTS對象。
三、客戶端:
打開你的客戶端應(yīng)用程序源代碼,并打開客戶端數(shù)據(jù)模塊中的DCOMConnection對象的ServerName屬性列表,此時,你將可以看到MTS對象出現(xiàn)在了列表中,選擇它,并重新編譯你的客戶應(yīng)用程序。如果你在客戶端代碼中沒有加入對ServerName的引用硬編碼,則你將看到客戶端不需任何改變就能夠正常運行,而此時它引用的已不是DCOM對象而是運行在COM+環(huán)境中的MTS對象。為證實這一點,你可以運行DCOMCNFG。在本地計算機中“正在運行的進程”列表中,你將看到MTS正在歡快的旋轉(zhuǎn)。
四、注意的問題:
1、上述方法是將原DCOM   應(yīng)用服務(wù)器的類型庫導(dǎo)入到MTS服務(wù)器中,再實現(xiàn)類型庫中的方法。因此,如果你將新生成的MTS服務(wù)器組件發(fā)布到其他計算機上,并且沒有將原DCOM應(yīng)用服務(wù)器拷貝并注冊到該計算機上,將你的客戶端將會收到“找不到類型庫”的錯誤提示。解決這一問題的辦法是將原DCOM應(yīng)用服務(wù)器的*.tlb文件復(fù)制到該計算機上,并用tregsvr.exe –t (server).tlb 來在該計算機上注冊類型庫(server用你原服務(wù)器名代替)。另一種方法是,在編輯MTS對象類型庫時,直接引用原服務(wù)器的TLB文件,而在分民MTS對象將該TLB文件與MTS包隨同分發(fā)。
2、以上轉(zhuǎn)換事實上只能對比較簡單的DCOM對象進行。如果你的DCOM代碼中加入了與后端數(shù)據(jù)庫相關(guān)的事務(wù)支持代碼,則你必須修改其代碼,使之使用MTS提供的事務(wù)管理功能,這樣才能充分發(fā)揮MTS資源管理、事務(wù)協(xié)調(diào)的強大功能,當然,如果你的DCOM對象沒有使用與MTS相容的線程模型,則你的修改工作量將會更大。
3、在轉(zhuǎn)換成MTS對象后,你就能直接運用MTS基于角色的安全功能,對你的MTS的安全屬性實施細微的控制,并且不用增加任何代碼,當然如果你的代碼中加入了原基于DCOM的特殊安全設(shè)定,你可能還要進行微調(diào)。但是,COM+會兼容這些安全代碼。
4、轉(zhuǎn)換成MTS對象后,建議你重新確定你的COM默認發(fā)生的“最低安全限制”屬性和你計算機的防火墻設(shè)置,以免它停止工作或“拒絕訪問”。

上一篇:控件style你知我知

下一篇:對DBGrid中的列進行顯示與否的設(shè)置

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 河南省| 鄂伦春自治旗| 集贤县| 阜南县| 徐汇区| 屯门区| 洛宁县| 资源县| 海淀区| 新余市| 织金县| 会同县| 叙永县| 昭觉县| 桂林市| 蓝田县| 垫江县| 新郑市| 吴忠市| 岑巩县| 通渭县| 右玉县| 若尔盖县| 西丰县| 延安市| 和平区| 无极县| 方正县| 东明县| 铜鼓县| 安泽县| 保亭| 北海市| 屏山县| 和平县| 永年县| 南丹县| 上犹县| 双流县| 定日县| 长泰县|