RemObject服务端配置程序编写_第1页
RemObject服务端配置程序编写_第2页
RemObject服务端配置程序编写_第3页
RemObject服务端配置程序编写_第4页
RemObject服务端配置程序编写_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、RemObject认证服务端程序编写步骤1 功能说明:用remobject编写服务端,通rodl暴露的方法给客户调用,但这些方法需要通过认证才能使用。服务端应提供两种服务:1、 登陆服务提供登陆认证方法2、 应用服务用户编写的具体方法,但需要在登陆服务认证通过的情况下才能使用2 工作示意图3 服务端编写步骤3.1 在硬盘中新建一个文件夹d:testServer3.2 启动delphi3.3 点击菜单fileànewàother3.4 选择remObjects SDK页面 3.5 再选择 VCL图标, 然后点击OK按钮进入一步在Project Folder:中录入d:test

2、Server点击 advanced Project Options.按钮,进入高级选项设置然后Server Class选择成TROSuperTCPServer,也可选择其它的Message Class选择TROBinMessag表示采用二进制传输入方式,或者选择其它点击确定返回3.6 再点击OK按钮,这时向导处理完成啦。3.7 点击菜单view àproject manage3.8 双击testProject.exe设置服务端为默认项目3.9 打开serverForm表单在界面上加入一个控件TROInMemorySessionManager并命名为ROSessionManager在界

3、面上加入一个控件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)点击菜单Code

4、GenàdelphiàImplementationàAppService 生成应用服务实现文件代码,然后按保存,选择路径为d:testServer,(注意:如果你已经在实现代码中编写了代码就不要保存,否则你编写的代码会被覆盖,如果你要加方法,可以用delphi打开AppService_Impl单元的interface部份声明方法(例如: function GetSessionID: Widestring;),然后按ctrl+shift+C产生实现代码,然后编写)5)点击菜单CodeGenàdelphiàImplementationàL

5、ogService 生成登陆服务实现文件代码,然后按保存,选择路径为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

6、) 引用单元SyncObjs3) 定义全局变量 CriticalSection: TCriticalSection; icount: integer 有效实例数4) 编写create方法procedure TServerForm.FormCreate(Sender: TObject);begin CriticalSection:= TCriticalSection.create; ROServer.Active := true;end;5) 增加方法procedure TServerForm.log(Astr: widestring);begin if CriticalSection = ni

7、l then exit; CriticalSection.Enter; try try if AStr = '' then Memo.Lines.Add('') else Memo.Lines.Add(DateTimetoStr(Now) + ': ' + Astr); except end; finally CriticalSection.Leave; end;end;6) 编写ROSessionManager控件的onSessionCreated方法与onSessionDeleted方法;3.13.2 编写接口实现单元文件LogService

8、_Impl1) 引用单元implementation$R *.dfmuses Generated: NewLibrary_Invk, variants,fServerForm;2) 按F12切换到界面编辑窗口设置sessionManager为 ServerForm.ROSessionManager3) 增加私有方法procedure TLogService.log(Astr: widestring);begin ServerForm.log(Astr);end;4) 编写login代码function TLogService.login(const userid: Widestring; co

9、nst password: Widestring): Boolean;begin Log('User ''' + UserID + ''' is trying logon with password ''' + Password + ''''); if (Session.Values'Login' <> Null) then begin Log('User ''' + Session.Values'Login'

10、; + ''' is already connected to session ' + GUIDToString(ClientID); Log('Login unsuccessful'); Result := True; Exit; end; result := (UserID <> '') and (UserID = Password); / if Result then begin Session.Values'Login' := UserId; Session.Values'Passwor

11、d' := Password; Log('Login successful'); end else begin Log('Invalid login!'); DestroySession; / Wrong login! The session cannot be persisted end; Log('');end;5) 编写logout代码procedure TLogService.logout(const SessionID: Widestring);var aUser: WideString;begin if Session.Val

12、ues'Login' <> Null then aUser := Session.Values'Login' else aUser := '' Log('User ''' + aUser + ''' has requested logout'); Log(''); DestroySession; / Removes the session from the SessionManagerend;3.13.3 编写接口实现单元文件AppService_Impl

13、1) 引用单元implementation$R *.dfmuses Generated: NewLibrary_Invk, variants,fServerForm;2) 按F12切换到界面编辑窗口·重要设置sessionManager为 ServerForm.ROSessionManager设置RequiresSession为true; 说明:这个参数非常重要,表示应用服务不再产生新的实例,而是用客户robinmessage.clentID来查找服务端创建的session来使用。3) 编写应用函数function TAppService.Sum(const A: Integer;

14、const B: Integer): Integer;begin Result:=a+b;end;function TAppService.GetServerTime: DateTime;begin Result:=now;end;function TAppService.GetSessionID: Widestring;begin Result:=GUIDToString(Session.SessionID);end;保存所有文件,致此服务端已经编写完成。编译运行程序,在浏览器中输入 http:/localhost:8095/如果出现ROSC:Invalid connection strin

15、g, 表示应用服务器编写成功。4 客户端调用步骤4.1 建立文件夹d:testClient4.2 新启动一个delphi4.3 在项目中引入文件D:testServer NewLibrary_Intf.pas4.4 增加客户端控件1) ROMessage: TROBinMessage; 2) ROChannel: TROSuperTCPChannel;设置属性host 为 localhost /可以自己修改为服务端的ip设置端口为8095 /可以需要设定通讯端口3) logServer: TRORemoteService;设置 channel 为 ROChannel设置 Message 为 R

16、OMessage设置serviceName 为 LogService4) appServer: TRORemoteService;设置 channel 为 ROChannel设置 Message 为 ROMessage设置serviceName 为 AppService5) 引用接口文件到项目中D:testServer NewLibrary_Intf.pas6) 在主窗口中引用NewLibrary_Intf.pas7) 定义全局变量 appsvr:IAppService;logsvr:ILogService;8) 客户端界面9) 代码单元unit tempa;interfaceuses Win

17、dows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uRORemoteService, uROClient, uROSuperTCPChannel, uROBinMessage,NewLibrary_Intf, StdCtrls;type TForm1 = class(TForm) ROMessage: TROBinMessage; ROChannel: TROSuperTCPChannel; logServer: TRORemoteService; appServer: TRORem

18、oteService; 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: TObje

19、ct); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private Private declarations public Public declarations appsvr:IAppService; logsvr:ILogService; end;var Form1: TForm1;implementation$R *.dfmprocedure TForm1.FormCreate(Sender: TObject);begin ROChannel.Active:=true; appsvr:=( appServer as IAppService); logsvr:=(logServer as ILogService

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论