版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
RemObject認(rèn)證服務(wù)端程序編寫步驟功能說(shuō)明:用remobject編寫服務(wù)端,通rodl暴露的方法給客戶調(diào)用,但這些方法須要通過(guò)認(rèn)證才能運(yùn)用。服務(wù)端應(yīng)供應(yīng)兩種服務(wù):登陸服務(wù)供應(yīng)登陸認(rèn)證方法應(yīng)用服務(wù)用戶編寫的詳細(xì)方法,但須要在登陸服務(wù)認(rèn)證通過(guò)的狀況下才能運(yùn)用工作示意圖服務(wù)端編寫步驟在硬盤中新建一個(gè)文件夾d:\testServer啟動(dòng)delphi點(diǎn)擊菜單filenewother選擇remObjectsSDK頁(yè)面再選擇VCL圖標(biāo),然后點(diǎn)擊OK按鈕進(jìn)入一步在ProjectFolder:中錄入d:\testServer點(diǎn)擊advancedProjectOptions..按鈕,進(jìn)入高級(jí)選項(xiàng)設(shè)置然后ServerClass選擇成TROSuperTCPServer,也可選擇其它的MessageClass選擇TROBinMessag表示采納二進(jìn)制傳輸入方式,或者選擇其它點(diǎn)擊確定返回再點(diǎn)擊OK按鈕,這時(shí)向?qū)幚硗瓿衫?。點(diǎn)擊菜單viewprojectmanage雙擊testProject.exe設(shè)置服務(wù)端為默認(rèn)項(xiàng)目打開(kāi)serverForm表單在界面上加入一個(gè)控件TROInMemorySessionManager并命名為ROSessionManager在界面上加入一個(gè)控件TMemo并命名為memo。點(diǎn)擊菜單RemObjectsSDKEditServiceLibrary,進(jìn)行應(yīng)用服務(wù)器編輯1)將服務(wù)名稱改為AppService,并且增加一個(gè)方法getSessionID2)增加一個(gè)服務(wù)LogServices,增加兩個(gè)方法login(user,password:widestring):booleanlogout(sessionID:widestring):3)點(diǎn)擊菜單CodeGendelphiinterface生成接口文件代碼,然后按保存,選擇路徑為d:\testServer4)點(diǎn)擊菜單CodeGendelphiImplementationAppService生成應(yīng)用服務(wù)實(shí)現(xiàn)文件代碼,然后按保存,選擇路徑為d:\testServer,(留意:假如你已經(jīng)在實(shí)現(xiàn)代碼中編寫了代碼就不要保存,否則你編寫的代碼會(huì)被覆蓋,假如你要加方法,可以用delphi打開(kāi)AppService_Impl單元的interface部份聲明方法(例如:functionGetSessionID:Widestring;),然后按ctrl+shift+C產(chǎn)生實(shí)現(xiàn)代碼,然后編寫)5)點(diǎn)擊菜單CodeGendelphiImplementationLogService生成登陸服務(wù)實(shí)現(xiàn)文件代碼,然后按保存,選擇路徑為d:\testServer6)點(diǎn)擊菜單CodeGendelphiInvoker生成服務(wù)端調(diào)用代碼,然后按保存,選擇路徑為d:\testServer。關(guān)閉服務(wù)器調(diào)設(shè)置工具返回到delphi,然后在delphi界面按ctrl+F9,進(jìn)入下面界面選擇其次項(xiàng)按OK選擇其次項(xiàng)按OK,到此項(xiàng)目初步完成,并且可以編譯運(yùn)行了保存項(xiàng)目全部文件。接下來(lái)是特別重要的設(shè)置部分啦。接口代碼編寫及相關(guān)設(shè)置(重點(diǎn))設(shè)置主窗體serverform代碼1)打開(kāi)主窗口文件FserverForm2)引用單元SyncObjs3)定義全局變量CriticalSection:TCriticalSection;icount:integer有效實(shí)例數(shù)4)編寫create方法procedureTServerForm.FormCreate(Sender:TObject);beginCriticalSection:=TCriticalSection.create;ROServer.Active:=true;end;5)增加方法procedureTServerForm.log(Astr:widestring);beginifCriticalSection=nilthenexit;CriticalSection.Enter;trytryifAStr=''thenMemo.Lines.Add('')elseMemo.Lines.Add(DateTimetoStr(Now)+':'+Astr);exceptend;finallyCriticalSection.Leave;end;end;6)編寫ROSessionManager控件的onSessionCreated方法與onSessionDeleted方法;編寫接口實(shí)現(xiàn)單元文件LogService_Impl引用單元implementation{$R*.dfm}uses{Generated:}NewLibrary_Invk,variants,fServerForm;按F12切換到界面編輯窗口設(shè)置sessionManager為ServerForm.ROSessionManager增加私有方法procedureTLogService.log(Astr:widestring);beginServerForm.log(Astr);end;編寫login代碼functionTLogService.login(constuserid:Widestring;constpassword:Widestring):Boolean;beginLog('User'''+UserID+'''istryinglogonwithpassword'''+Password+'''');if(Session.Values['Login']<>Null)thenbeginLog('User'''+Session.Values['Login']+'''isalreadyconnectedtosession'+GUIDToString(ClientID));Log('Loginunsuccessful');Result:=True;Exit;end;result:=(UserID<>'')and(UserID=Password);//ifResultthenbeginSession.Values['Login']:=UserId;Session.Values['Password']:=Password;Log('Loginsuccessful');endelsebeginLog('Invalidlogin!');DestroySession;//Wronglogin!Thesessioncannotbepersistedend;Log('');end;編寫logout代碼procedureTLogService.logout(constSessionID:Widestring);varaUser:WideString;beginifSession.Values['Login']<>NullthenaUser:=Session.Values['Login']elseaUser:='';Log('User'''+aUser+'''hasrequestedlogout');Log('');DestroySession;//RemovesthesessionfromtheSessionManagerend;編寫接口實(shí)現(xiàn)單元文件AppService_Impl引用單元implementation{$R*.dfm}uses{Generated:}NewLibrary_Invk,variants,fServerForm;按F12切換到界面編輯窗口·重要重要設(shè)置sessionManager為ServerForm.ROSessionManager設(shè)置RequiresSession為true;說(shuō)明:這個(gè)參數(shù)特別重要,表示應(yīng)用服務(wù)不再產(chǎn)生新的實(shí)例,而是用客戶robinmessage.clentID來(lái)查找服務(wù)端創(chuàng)建的session來(lái)運(yùn)用。編寫應(yīng)用函數(shù)functionTAppService.Sum(constA:Integer;constB:Integer):Integer;beginResult:=a+b;end;functionTAppService.GetServerTime:DateTime;beginResult:=now;end;functionTAppService.GetSessionID:Widestring;beginResult:=GUIDToString(Session.SessionID);end;保存全部文件,致此服務(wù)端已經(jīng)編寫完成。編譯運(yùn)行程序,在閱讀器中輸入://localhost:8095/假如出現(xiàn)ROSC:Invalidconnectionstring,表示應(yīng)用服務(wù)器編寫勝利。客戶端調(diào)用步驟建立文件夾d:\testClient新啟動(dòng)一個(gè)delphi在項(xiàng)目中引入文件D:\testServer\NewLibrary_Intf.pas增加客戶端控件1)ROMessage:TROBinMessage;2)ROChannel:TROSuperTCPChannel;設(shè)置屬性host為localhost//可以自己修改為服務(wù)端的ip設(shè)置端口為8095//可以須要設(shè)定通訊端口3)logServer:TRORemoteService;設(shè)置channel為ROChannel設(shè)置Message為ROMessage設(shè)置serviceName為L(zhǎng)ogServiceappServer:TRORemoteService;設(shè)置channel為ROChannel設(shè)置Message為ROMessage設(shè)置serviceName為AppService引用接口文件到項(xiàng)目中D:\testServer\NewLibrary_Intf.pas在主窗口中引用NewLibrary_Intf.pas定義全局變量appsvr:IAppService;logsvr:ILogService;客戶端界面代碼單元unittempa;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,uRORemoteService,uROClient,uROSuperTCPChannel,uROBinMessage,NewLibrary_Intf,StdCtrls;typeTForm1=class(TForm)ROMessage:TROBinMessage;ROChannel:TROSuperTCPChannel;logServer:TRORemoteService;appServer:TRORemoteService;Button1:TButton;Edit1:TEdit;Edit2:TEdit;Label1:TLabel;Label2:TLabel;Button2:TButton;Button3:TButton;Button4:TButton;procedureFormCreate(Sender:TObject);procedureFormDestroy(Sender:TObject);procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton4Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}appsvr:IAppService;logsvr:ILogService;end;varForm1:TForm1;implementation{$R*.dfm}procedureTForm1.FormCreate(Sender:TObject);beginROChannel.Active:=true;appsvr:=(appServerasIAppService);logsvr:=(logServerasILogService);end;procedureTForm1.FormDestroy(Sender:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職船舶與海洋工程裝備(船舶導(dǎo)航)試題及答案
- 2025年大學(xué)化學(xué)(分析化學(xué))試題及答案
- 2025年高職(美容美體藝術(shù))美體塑形階段測(cè)試題及答案
- 禁毒宣傳知識(shí)課件
- 當(dāng)前醫(yī)患關(guān)系矛盾焦點(diǎn)
- 神秘殺手信息技術(shù)
- 祛斑方法培訓(xùn)課件
- 天津市第九中學(xué)2025-2026學(xué)年高三上學(xué)期12月月考語(yǔ)文試題(含答案)
- 2022-2023學(xué)年廣東深圳羅湖區(qū)九年級(jí)上學(xué)期11月考英語(yǔ)試題含答案
- 2026廣東清遠(yuǎn)市連南瑤族自治縣聚匯勞務(wù)派遣有限公司第二次招聘門衛(wèi)崗位1人備考題庫(kù)及答案詳解(奪冠系列)
- 兒童呼吸道合胞病毒感染診斷治療和預(yù)防專家共識(shí) 4
- 雨課堂在線學(xué)堂《大數(shù)據(jù)技術(shù)與應(yīng)用》作業(yè)單元考核答案
- 全國(guó)計(jì)算機(jī)等級(jí)考試一級(jí)WPS Office真題題庫(kù)及答案
- 養(yǎng)牛場(chǎng)消防知識(shí)培訓(xùn)
- 義警法律知識(shí)培訓(xùn)總結(jié)課件
- 實(shí)施指南(2025)《DZT 0462.5-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第 5 部分:金、銀、鈮、鉭、鋰、鋯、鍶、稀土、鍺》解讀
- 棉塵安全培訓(xùn)課件
- 梯子作業(yè)安全培訓(xùn)效果課件
- 管控人力成本課件
- 吸附解析塔拆除施工方案
- 留置場(chǎng)所人員管理辦法
評(píng)論
0/150
提交評(píng)論