線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2495
推到 Plurk!
推到 Facebook!

三層式架構-ASP呼叫COM-COM連結DCOM-DCOM到APPSERVER

答題得分者是:jieshu
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-29 12:57:38 IP:61.30.xxx.xxx 未訂閱
假如APPSERVER端是一個常駐程式,有一個DCOM的介面給COM元件使用 希望能和ASP端同步處理資料,但結果COM總是會建立一個新的DCOM介面 去連結新的APPSERVER,不能跟目前執行的APPSERVER的資料同步,有方法 解決嗎?
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-29 19:31:30 IP:218.17.xxx.xxx 未訂閱
引言: 假如APPSERVER端是一個常駐程式,有一個DCOM的介面給COM元件使用 希望能和ASP端同步處理資料,但結果COM總是會建立一個新的DCOM介面 去連結新的APPSERVER,不能跟目前執行的APPSERVER的資料同步,有方法 解決嗎?
发消息通知对方去刷新。或者你的APP SERVER输出一个DCOM的接口让你的DCOM调用,这个接口函数的功能就是刷新。
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-01 09:21:50 IP:61.30.xxx.xxx 未訂閱
一樣不能同步! APP端有一個變數K,而且是一個常駐程式,當CLIENT調用這個DCOM接口時 會企改變這個變數,但經過COM連到DCOM之後也調用了接口就是不能改變變數 內容
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-01 09:39:31 IP:203.204.xxx.xxx 未訂閱
引言: 一樣不能同步! APP端有一個變數K,而且是一個常駐程式,當CLIENT調用這個DCOM接口時 會企改變這個變數,但經過COM連到DCOM之後也調用了接口就是不能改變變數 內容
應該沒問題才對, 一般所寫的AppServer程式會有一個Form, 只要將變數宣告在這個Form裡的, 就是所有RemoteDataModule共用, 不管任一連線所產生的RDM, 再不行將變數值存到一個檔案, 應該也可以. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-01 10:29:36 IP:61.30.xxx.xxx 未訂閱
引言: 應該沒問題才對, 一般所寫的AppServer程式會有一個Form, 只要將變數宣告在這個Form裡的, 就是所有RemoteDataModule共用, 不管任一連線所產生的RDM, 再不行將變數值存到一個檔案, 應該也可以.
若COM元件佈在本地端,所呼叫的DCOM才可以連上APP 若佈在其它電腦上,並將DCOM注冊,其所調用的DCOM 會和原APPSERVER在不同模組上
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-01 19:58:16 IP:203.204.xxx.xxx 未訂閱
引言: 若COM元件佈在本地端,所呼叫的DCOM才可以連上APP 若佈在其它電腦上,並將DCOM注冊,其所調用的DCOM 會和原APPSERVER在不同模組上
您要不要描述一下您的架構, 感覺有點亂, 不同AppServer程式當然沒有辦法同步變數, 不過依然可以透過共同的檔案來控制. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-02 10:38:40 IP:61.30.xxx.xxx 未訂閱
看圖吧!看圖比較快~    
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-02 11:19:18 IP:203.204.xxx.xxx 未訂閱
引言: 看圖吧!看圖比較快~ 但結果COM總是會建立一個新的DCOM介面 去連結新的APPSERVER,不能跟目前執行的APPSERVER的資料同步,有方法 解決嗎?
您的新的AppServer和目前執行的AppServer程式有在同一台電腦上嗎? 是變成兩個執行檔執行起來嗎? 照道理說手動執行起來的AppServer不會自己關閉, 紀錄在Form裡的變數值也會一值存在, 不曉得您為什麼無法同步計數器和顯示傳來的字串. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-02 11:56:00 IP:61.30.xxx.xxx 未訂閱
問題就在這裡! 為何COM連到DCOM會新開一個FORM(APPSERVER) 而不會和手動啟動的FORM資料互通呢?
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-02 12:22:22 IP:203.204.xxx.xxx 未訂閱
引言: 問題就在這裡! 為何COM連到DCOM會新開一個FORM(APPSERVER) 而不會和手動啟動的FORM資料互通呢?
是變成兩個執行檔執行起來嗎? 會不會是您RemoteDataModule建立時的參數有問題. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-02 13:08:06 IP:61.30.xxx.xxx 未訂閱
COM到DCOM這一端的部份程式碼: //COM元件調用DCOM var rmcall: IAllinone; rmcall:=CreateRemoteComObject(MachineName, CLASS_Allinone) as IAllinone; //執行DCOM介面 rmcall.ServerRun("命令列"); .......... //=====RemoteDataModule==================== unit RDM; ......... type TAllinone = class(TRemoteDataModule, IAllinone) procedure RemoteDataModuleCreate(Sender: TObject); private { Private declarations } protected class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override; function ServerRun(const tosvr: WideString): OleVariant; safecall; end; implementation uses Unit1; {$R *.DFM} function TAllinone.ServerRun(const tosvr: WideString): OleVariant; begin //分析命令並執行TASK .......... .......... Result:=FormatDateTime('hh:nn:ss',Form1.someday.DateTime); end; procedure TAllinone.RemoteDataModuleCreate(Sender: TObject); begin Form1.UpdateClientCount(1); end; initialization TComponentFactory.Create(ComServer, TAllinone, Class_Allinone, ciMultiInstance, tmApartment); end. ================ COM調用DCOM時會再開一個APPSERVER,結束COM,這個APP跟著結束 原來手啟的一直開著........
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-02 16:39:48 IP:203.204.xxx.xxx 未訂閱
引言: COM到DCOM這一端的部份程式碼: //COM元件調用DCOM var rmcall: IAllinone; rmcall:=CreateRemoteComObject(MachineName, CLASS_Allinone) as IAllinone; //執行DCOM介面 rmcall.ServerRun("命令列"); .......... //=====RemoteDataModule==================== initialization TComponentFactory.Create(ComServer, TAllinone, Class_Allinone, ciMultiInstance, tmApartment); end. ================ COM調用DCOM時會再開一個APPSERVER,結束COM,這個APP跟著結束 原來手啟的一直開著........
我說的設定就是指TComponentFactory這一段, 看起來應該沒問題(ciMultiInstance), 不過您Client建立的方式和我們不同, 不曉得這樣有沒有影響, 一般是直接用一個DCOMConnection來連線呼叫, 而不是使用建立介面的方式, 您要不要改用DCOMConnection直接連線呼叫試試, 再不行可能就是由COM呼叫和一般執行檔的Client呼叫不同, 那就要寫入檔案來處理, 如果一定要在畫面上顯示, 變成要用Timer定時讀檔顯示出來. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-11-03 09:06:12 IP:61.30.xxx.xxx 未訂閱
引言: 我說的設定就是指TComponentFactory這一段, 看起來應該沒問題(ciMultiInstance), 不過您Client建立的方式和我們不同, 不曉得這樣有沒有影響, 一般是直接用一個DCOMConnection來連線呼叫, 而不是使用建立介面的方式, 您要不要改用DCOMConnection直接連線呼叫試試, 再不行可能就是由COM呼叫和一般執行檔的Client呼叫不同, 那就要寫入檔案來處理, 如果一定要在畫面上顯示, 變成要用Timer定時讀檔顯示出來.
小弟的公司比較窮,買不起奔騰兩雞的電腦來跑這樣的規劃 只有一部溜佰雞當伺服器,不過別急,5年後公司一定買的起 到時不管要跑10個或100個TIMER都沒問題~
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-11-03 10:08:04 IP:203.204.xxx.xxx 未訂閱
引言: 小弟的公司比較窮,買不起奔騰兩雞的電腦來跑這樣的規劃 只有一部溜佰雞當伺服器,不過別急,5年後公司一定買的起 到時不管要跑10個或100個TIMER都沒問題~
其實Timer並不會很耗資源, 除非你設的時間很短, 且做很多事情, 但您現在的專案應該不會, 只要設3秒或1秒讀取檔案內容顯示在畫面上, 跑其來應該還好, 您可以試看看. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Kenlin2004
一般會員


發表:20
回覆:33
積分:10
註冊:2004-10-27

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-11-03 10:58:23 IP:61.30.xxx.xxx 未訂閱
引言: 其實Timer並不會很耗資源, 除非你設的時間很短, 且做很多事情, 但您現在的專案應該不會, 只要設3秒或1秒讀取檔案內容顯示在畫面上, 跑其來應該還好, 您可以試看看.
小弟的公司的溜佰每天要日理萬機(備份,運算,CGI),而且已經年老力袞, 沒能再承受得了日以繼夜讀寫檔案,望主子體諒溜佰為您服務多年的份上, 放過溜佰吧 < >< >
系統時間:2024-04-26 6:29:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!