2023年6月20日发(作者:)
RemObject服务端配置程序编写RemObject认证服务端程序编写步骤1 功能说明:⽤remobject编写服务端,通rodl暴露的⽅法给客户调⽤,但这些⽅法需要通过认证才能使⽤。服务端应提供两种服务:1、登陆服务提供登陆认证⽅法2、应⽤服务⽤户编写的具体⽅法,但需要在登陆服务认证通过的情况下才能使⽤2 ⼯作⽰意图3 服务端编写步骤3.1 在硬盘中新建⼀个⽂件夹d:testServer 3.2 启动delphi3.3 点击菜单file→new→other3.4 选择remObjects SDK页⾯3.5 再选择VCL图标, 然后点击OK按钮进⼊⼀步在Project Folder:中录⼊d:testServer点击advanced Project Options..按钮,进⼊⾼级选项设置然后Server Class选择成TROSuperTCPServer,也可选择其它的Message Class选择TROBinMessag表⽰采⽤⼆进制传输⼊⽅式,或者选择其它点击确定返回3.6 再点击OK按钮,这时向导处理完成啦。3.7 点击菜单view project manage3.8 双击设置服务端为默认项⽬3.9 打开serverForm表单在界⾯上加⼊⼀个控件TROInMemorySessionManager并命名为ROSessionManager 在界⾯上加⼊⼀个控件TMemo并命名为memo。3.10 点击菜单RemObjects SDK Edit Service Library,进⾏应⽤服务器编辑1)将服务名称改为AppService,并且增加⼀个⽅法getSessionID2)增加⼀个服务LogServices, 增加两个⽅法login(user,password:widestring):booleanlogout(sessionID:widestring):3)点击菜单CodeGen→delphi→interface ⽣成接⼝⽂件代码,然后按保存,选择路径为d:testServer4)点击菜单CodeGen→delphi→Implementation→AppService ⽣成应⽤服务实现⽂件代码,然后按保存,选择路径为d:testServer,(注意:如果你已经在实现代码中编写了代码就不要保存,否则你编写的代码会被覆盖,如果你要加⽅法,可以⽤delphi打开AppService_Impl 单元的interface部份声明⽅法(例如:function GetSessionID: Widestring;),然后按ctrl+shift+C产⽣实现代码,然后编写)5)点击菜单CodeGen→delphi→Implementation→LogService ⽣成登陆服务实现⽂件代码,然后按保存,选择路径为d:testServer6)点击菜单CodeGen→delphi→Invoker ⽣成服务端调⽤代码,然后按保存,选择路径为d:testServer。3.11 关闭服务器调设置⼯具返回到delphi,然后在delphi界⾯按ctrl+F9,进⼊下⾯界⾯选择第⼆项按OK选择第⼆项按OK,到此项⽬初步完成,并且可以编译运⾏了3.12 保存项⽬所有⽂件。接下来是⾮常重要的设置部分啦。3.13 接⼝代码编写及相关设置(重点)3.13.1 设置主窗体serverform代码1) 打开主窗⼝⽂件FserverForm2) 引⽤单元SyncObjs3) 定义全局变量CriticalSection: TCriticalSection;icount: integer 有效实例数4) 编写create⽅法procedure eate(Sender: TObject);beginCriticalSection:= ; := true;end;5) 增加⽅法procedure (Astr: widestring);beginif CriticalSection = nil then exit;;trytryif AStr = '' ('')(DateTimetoStr(Now) + ': ' + Astr);exceptend;;end;end;6) 编写ROSessionManager控件的onSessionCreated⽅法与onSessionDeleted⽅法;3.13.2 编写接⼝实现单元⽂件LogService_Impl1)引⽤单元implementation{$R *.dfm}uses{Generated:} NewLibrary_Invk, variants,fServerForm;2)按F12切换到界⾯编辑窗⼝设置sessionManager为ionManager3)增加私有⽅法procedure (Astr: widestring);(Astr);end;4)编写login代码function (const userid: Widestring; const password: Widestring): Boolean; beginLog('User ''' + UserID + ''' is trying logon with password ''' + Password + '''');if (['Login'] <> Null) then beginLog('User ''' + ['Login'] + ''' is already connected to session ' + GUIDToString(ClientID));Log('Login unsuccessful');Result := True;Exit;end;result := (UserID <> '') and (UserID = Password); //if Result then ['Login'] := UserId;['Password'] := Password;Log('Login successful');endelse beginLog('Invalid login!');DestroySession; // Wrong login! The session cannot be persistedend;Log('');end;5)编写logout代码procedure (const SessionID: Widestring);varaUser: WideString;beginif ['Login'] <> Null thenaUser := Session.V alues['Login']elseaUser := '';Log('User ''' + aUser + ''' has requested logout');Log('');DestroySession; // Removes the session from the SessionManagerend;3.13.3 编写接⼝实现单元⽂件AppService_Impl1)引⽤单元implementation{$R *.dfm}uses{Generated:} NewLibrary_Invk, variants,fServerForm;2)按F12切换到界⾯编辑窗⼝·重要设置sessionManager为ionManager设置RequiresSession为true;说明:这个参数⾮常重要,表⽰应⽤服务不再产⽣新的实例,⽽是⽤客户D来查找服务端创建的session来使⽤。3)编写应⽤函数function (const A: Integer; const B: Integer): Integer;beginResult:=a+b;end;function verTime: DateTime;beginResult:=now;end;function sionID: Widestring;beginResult:=GUIDToString(nID);end;保存所有⽂件,致此服务端已经编写完成。编译运⾏程序,在浏览器中输⼊localhost:8095/如果出现ROSC:Invalid connection string, 表⽰应⽤服务器编写成功。4 客户端调⽤步骤4.1 建⽴⽂件夹d:testClient4.2 新启动⼀个delphi4.3 在项⽬中引⼊⽂件D:testServer NewLibrary_ 4.4 增加客户端控件1) ROMessage: TROBinMessage;2) ROChannel: TROSuperTCPChannel;设置属性host 为localhost //可以⾃⼰修改为服务端的ip设置端⼝为8095 //可以需要设定通讯端⼝3) logServer: TRORemoteService;设置channel 为ROChannel设置Message 为ROMessage设置serviceName 为LogService4)appServer: TRORemoteService;设置channel 为ROChannel设置Message 为ROMessage设置serviceName 为AppService5)引⽤接⼝⽂件到项⽬中D:testServer NewLibrary_6)在主窗⼝中引⽤NewLibrary_7)定义全局变量appsvr:IAppService;logsvr:ILogService;8)客户端界⾯9)代码单元unit tempa;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;procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject); private{ Private declarations }public{ Public declarations }appsvr:IAppService;logsvr:ILogService;end;varForm1: TForm1;implementation{$R *.dfm}procedure eate(Sender: TObject); :=true;appsvr:=( appServer as IAppService);logsvr:=(logServer as ILogService);end;procedure stroy(Sender: TObject); :=False;end;procedure 1Click(Sender: TObject); beginif (,) thenshowmessage('登陆成功')else beginshowmessage('登陆失败');end;end;procedure 2Click(Sender: TObject);(GUIDToString(ID));end;procedure 3Click(Sender: TObject);beginshowmessage(IntToStr((3,5)));end;procedure 4Click(Sender: TObject);beginshowmessage('服务器sessionID:'+sionID+chr(13)+'本地sessionID:'+GUIDToString(ID)); end;end.
2023年6月20日发(作者:)
RemObject服务端配置程序编写RemObject认证服务端程序编写步骤1 功能说明:⽤remobject编写服务端,通rodl暴露的⽅法给客户调⽤,但这些⽅法需要通过认证才能使⽤。服务端应提供两种服务:1、登陆服务提供登陆认证⽅法2、应⽤服务⽤户编写的具体⽅法,但需要在登陆服务认证通过的情况下才能使⽤2 ⼯作⽰意图3 服务端编写步骤3.1 在硬盘中新建⼀个⽂件夹d:testServer 3.2 启动delphi3.3 点击菜单file→new→other3.4 选择remObjects SDK页⾯3.5 再选择VCL图标, 然后点击OK按钮进⼊⼀步在Project Folder:中录⼊d:testServer点击advanced Project Options..按钮,进⼊⾼级选项设置然后Server Class选择成TROSuperTCPServer,也可选择其它的Message Class选择TROBinMessag表⽰采⽤⼆进制传输⼊⽅式,或者选择其它点击确定返回3.6 再点击OK按钮,这时向导处理完成啦。3.7 点击菜单view project manage3.8 双击设置服务端为默认项⽬3.9 打开serverForm表单在界⾯上加⼊⼀个控件TROInMemorySessionManager并命名为ROSessionManager 在界⾯上加⼊⼀个控件TMemo并命名为memo。3.10 点击菜单RemObjects SDK Edit Service Library,进⾏应⽤服务器编辑1)将服务名称改为AppService,并且增加⼀个⽅法getSessionID2)增加⼀个服务LogServices, 增加两个⽅法login(user,password:widestring):booleanlogout(sessionID:widestring):3)点击菜单CodeGen→delphi→interface ⽣成接⼝⽂件代码,然后按保存,选择路径为d:testServer4)点击菜单CodeGen→delphi→Implementation→AppService ⽣成应⽤服务实现⽂件代码,然后按保存,选择路径为d:testServer,(注意:如果你已经在实现代码中编写了代码就不要保存,否则你编写的代码会被覆盖,如果你要加⽅法,可以⽤delphi打开AppService_Impl 单元的interface部份声明⽅法(例如:function GetSessionID: Widestring;),然后按ctrl+shift+C产⽣实现代码,然后编写)5)点击菜单CodeGen→delphi→Implementation→LogService ⽣成登陆服务实现⽂件代码,然后按保存,选择路径为d:testServer6)点击菜单CodeGen→delphi→Invoker ⽣成服务端调⽤代码,然后按保存,选择路径为d:testServer。3.11 关闭服务器调设置⼯具返回到delphi,然后在delphi界⾯按ctrl+F9,进⼊下⾯界⾯选择第⼆项按OK选择第⼆项按OK,到此项⽬初步完成,并且可以编译运⾏了3.12 保存项⽬所有⽂件。接下来是⾮常重要的设置部分啦。3.13 接⼝代码编写及相关设置(重点)3.13.1 设置主窗体serverform代码1) 打开主窗⼝⽂件FserverForm2) 引⽤单元SyncObjs3) 定义全局变量CriticalSection: TCriticalSection;icount: integer 有效实例数4) 编写create⽅法procedure eate(Sender: TObject);beginCriticalSection:= ; := true;end;5) 增加⽅法procedure (Astr: widestring);beginif CriticalSection = nil then exit;;trytryif AStr = '' ('')(DateTimetoStr(Now) + ': ' + Astr);exceptend;;end;end;6) 编写ROSessionManager控件的onSessionCreated⽅法与onSessionDeleted⽅法;3.13.2 编写接⼝实现单元⽂件LogService_Impl1)引⽤单元implementation{$R *.dfm}uses{Generated:} NewLibrary_Invk, variants,fServerForm;2)按F12切换到界⾯编辑窗⼝设置sessionManager为ionManager3)增加私有⽅法procedure (Astr: widestring);(Astr);end;4)编写login代码function (const userid: Widestring; const password: Widestring): Boolean; beginLog('User ''' + UserID + ''' is trying logon with password ''' + Password + '''');if (['Login'] <> Null) then beginLog('User ''' + ['Login'] + ''' is already connected to session ' + GUIDToString(ClientID));Log('Login unsuccessful');Result := True;Exit;end;result := (UserID <> '') and (UserID = Password); //if Result then ['Login'] := UserId;['Password'] := Password;Log('Login successful');endelse beginLog('Invalid login!');DestroySession; // Wrong login! The session cannot be persistedend;Log('');end;5)编写logout代码procedure (const SessionID: Widestring);varaUser: WideString;beginif ['Login'] <> Null thenaUser := Session.V alues['Login']elseaUser := '';Log('User ''' + aUser + ''' has requested logout');Log('');DestroySession; // Removes the session from the SessionManagerend;3.13.3 编写接⼝实现单元⽂件AppService_Impl1)引⽤单元implementation{$R *.dfm}uses{Generated:} NewLibrary_Invk, variants,fServerForm;2)按F12切换到界⾯编辑窗⼝·重要设置sessionManager为ionManager设置RequiresSession为true;说明:这个参数⾮常重要,表⽰应⽤服务不再产⽣新的实例,⽽是⽤客户D来查找服务端创建的session来使⽤。3)编写应⽤函数function (const A: Integer; const B: Integer): Integer;beginResult:=a+b;end;function verTime: DateTime;beginResult:=now;end;function sionID: Widestring;beginResult:=GUIDToString(nID);end;保存所有⽂件,致此服务端已经编写完成。编译运⾏程序,在浏览器中输⼊localhost:8095/如果出现ROSC:Invalid connection string, 表⽰应⽤服务器编写成功。4 客户端调⽤步骤4.1 建⽴⽂件夹d:testClient4.2 新启动⼀个delphi4.3 在项⽬中引⼊⽂件D:testServer NewLibrary_ 4.4 增加客户端控件1) ROMessage: TROBinMessage;2) ROChannel: TROSuperTCPChannel;设置属性host 为localhost //可以⾃⼰修改为服务端的ip设置端⼝为8095 //可以需要设定通讯端⼝3) logServer: TRORemoteService;设置channel 为ROChannel设置Message 为ROMessage设置serviceName 为LogService4)appServer: TRORemoteService;设置channel 为ROChannel设置Message 为ROMessage设置serviceName 为AppService5)引⽤接⼝⽂件到项⽬中D:testServer NewLibrary_6)在主窗⼝中引⽤NewLibrary_7)定义全局变量appsvr:IAppService;logsvr:ILogService;8)客户端界⾯9)代码单元unit tempa;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;procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject); private{ Private declarations }public{ Public declarations }appsvr:IAppService;logsvr:ILogService;end;varForm1: TForm1;implementation{$R *.dfm}procedure eate(Sender: TObject); :=true;appsvr:=( appServer as IAppService);logsvr:=(logServer as ILogService);end;procedure stroy(Sender: TObject); :=False;end;procedure 1Click(Sender: TObject); beginif (,) thenshowmessage('登陆成功')else beginshowmessage('登陆失败');end;end;procedure 2Click(Sender: TObject);(GUIDToString(ID));end;procedure 3Click(Sender: TObject);beginshowmessage(IntToStr((3,5)));end;procedure 4Click(Sender: TObject);beginshowmessage('服务器sessionID:'+sionID+chr(13)+'本地sessionID:'+GUIDToString(ID)); end;end.
发布评论