三層式架構-ASP呼叫COM-COM連結DCOM-DCOM到APPSERVER |
答題得分者是:jieshu
|
Kenlin2004
一般會員 發表:20 回覆:33 積分:10 註冊:2004-10-27 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
Kenlin2004
一般會員 發表:20 回覆:33 積分:10 註冊:2004-10-27 發送簡訊給我 |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 一樣不能同步! 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 發送簡訊給我 |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 若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 發送簡訊給我 |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 看圖吧!看圖比較快~ 但結果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 發送簡訊給我 |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 問題就在這裡! 為何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 發送簡訊給我 |
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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
引言: 我說的設定就是指TComponentFactory這一段, 看起來應該沒問題(ciMultiInstance), 不過您Client建立的方式和我們不同, 不曉得這樣有沒有影響, 一般是直接用一個DCOMConnection來連線呼叫, 而不是使用建立介面的方式, 您要不要改用DCOMConnection直接連線呼叫試試, 再不行可能就是由COM呼叫和一般執行檔的Client呼叫不同, 那就要寫入檔案來處理, 如果一定要在畫面上顯示, 變成要用Timer定時讀檔顯示出來.小弟的公司比較窮,買不起奔騰兩雞的電腦來跑這樣的規劃 只有一部溜佰雞當伺服器,不過別急,5年後公司一定買的起 到時不管要跑10個或100個TIMER都沒問題~ |
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 小弟的公司比較窮,買不起奔騰兩雞的電腦來跑這樣的規劃 只有一部溜佰雞當伺服器,不過別急,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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |