RemObject服务端配置程序编写.docx
- 文档编号:26956272
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:21
- 大小:1.04MB
RemObject服务端配置程序编写.docx
《RemObject服务端配置程序编写.docx》由会员分享,可在线阅读,更多相关《RemObject服务端配置程序编写.docx(21页珍藏版)》请在冰豆网上搜索。
RemObject服务端配置程序编写
RemObject 认证服务端程序编写步骤
1功能说明:
用 remobject 编写服务端,通 rodl 暴露的方法给客户调用,但这些方法需要通过认证
才能使用。
服务端应提供两种服务:
1、 登陆服务
提供登陆认证方法
2、 应用服务
用户编写的具体方法,但需要在登陆服务认证通过的情况下才能使用
2工作示意图
标题
sessionManager
客户端通过连接通道访问服务
端提供的登陆认证服务,认证
成功后会在服务端产生一新的
session,并且sessionID=客户端
robinmessage.clentid
登陆认证服务
认证通过后产生session
应用方法服务
直接使用登陆认证产生的Session
客户端通过连接通道访问服务
端提供的应用服务,根据客户
端robinmessage.clentid在服务
端查找相应的session.sessionid
相同的session如果找到可以使
用提供的方法,找不到提示错
误
TROSuperTCPCha
nnel
TRORemoteS
ervice
TRORemote
Service
robinMessage
客户端
clientID
客户端
3服务端编写步骤
3.1 在硬盘中新建一个文件夹 d:
\testServer
3.2 启动 delphi
3.3 点击菜单 file→new→other
3.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 manage
3.8 双击 testProject.exe 设置服务端为默认项目
3.9 打开 serverForm 表单
在界面上加入一个控件 TROInMemorySessionManager 并命名为 ROSessionManager
在界面上加入一个控件 TMemo 并命名为 memo。
3.10 点击菜单 RemObjects SDK→Edit Service Library,
进行应用服务器编辑
1)将服务名称改为 AppService,并且增加一个方法 getSessionID
2)增加一个服务 LogServices, 增加两个方法
login(user,password:
widestring):
boolean
logout(sessionID:
widestring):
3)点击菜单 CodeGen→delphi→interface生成接口文件代码,然后按保存,选择路径
为 d:
\testServer
4)点击菜单 CodeGen→delphi→Implementation→AppService 生成应用服务实现文件代
码,然后按保存,选择路径为 d:
\testServer,(注意:
如果你已经在实现代码中编写了代码
就不要保存,否则你编写的代码会被覆盖,如果你要加方法,可以用 delphi 打开
AppService_Impl 单元的 interface 部份声明方法(例如:
functionGetSessionID:
Widestring;),然后按 ctrl+shift+C 产生实现代码,然后编写)
5)点击菜单 CodeGen→delphi→Implementation→LogService 生成登陆服务实现文件代
码,然后按保存,选择路径为 d:
\testServer
6)点击菜单 CodeGen→delphi→Invoker生成服务端调用代码,然后按保存,选择路
径为 d:
\testServer。
3.11 关闭服务器调设置工具返回到 delphi,然后在 delphi
界面按 ctrl+F9,进入下面界面
选择第二项按 OK
选择第二项按 OK,到此项目初步完成,并且可以编译运行了
3.12 保存项目所有文件。
接下来是非常重要的设置部分啦。
3.13 接口代码编写及相关设置(重点)
3.13.1 设置主窗体 serverform 代码
1) 打开主窗口文件 FserverForm
2) 引用单元 SyncObjs
3) 定义全局变量
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 = nil 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_Impl
1)引用单元
implementation
{$R *.dfm}
uses
{Generated:
} NewLibrary_Invk, variants,fServerForm;
2) 按 F12 切换到界面编辑窗口
设置 sessionManager 为 ServerForm.ROSessionManager
3) 增加私有方法
procedure TLogService.log(Astr:
widestring);
begin
ServerForm.log(Astr);
end;
4) 编写 login 代码
function TLogService.login(const userid:
Widestring; const 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'] + ''' 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['Password'] :
= 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.Values['Login'] <> Null then
aUser :
= Session.Values['Login']
else
aUser :
= '';
Log('User ''' + aUser + ''' has requested logout');
Log('');
DestroySession; // Removes the session from the SessionManager
end;
3.13.3 编写接口实现单元文件 AppService_Impl
1) 引用单元
implementation
{$R *.dfm}
uses
{Generated:
} NewLibrary_Invk, variants,fServerForm;
2) 按 F12 切换到界面编辑窗口·
重要
设置 sessionManager 为 ServerForm.ROSessionManager
设置 RequiresSession 为 true;
说明:
这个参数非常重要,表示应用服务不再产生新的实例,而是用客户
robinmessage.clentID 来查找服务端创建的 session 来使用。
3) 编写应用函数
function TAppService.Sum(const A:
Integer; 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 string, 表示应用服务器编写成功。
4客户端调用步骤
4.1 建立文件夹 d:
\testClient
4.2 新启动一个 delphi
4.3 在项目中引入文件 D:
\testServer\ NewLibrary_Intf.pas
4.4 增加客户端控件
1) ROMessage:
TROBinMessage;
2) ROChannel:
TROSuperTCPChannel;
设置属性 host 为 localhost //可以自己修改为服务端的 ip
设置端口为 8095//可以需要设定通讯端口
3) logServer:
TRORemoteService;
设置 channel 为 ROChannel
设置 Message 为 ROMessage
设置 serviceName 为 LogService
4) appServer:
TRORemoteService;
设置 channel 为 ROChannel
设置 Message 为 ROMessage
设置 serviceName 为 AppService
5) 引用接口文件到项目中
D:
\testServer\ NewLibrary_Intf.pas
6) 在主窗口中引用 NewLibrary_Intf.pas
7) 定义全局变量
appsvr:
IAppService;
logsvr:
ILogService;
8) 客户端界面
9) 代码单元
unit tempa;
interface
uses
Windows, 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:
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;
var
Form1:
TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender:
TObject);
begin
ROChannel.Active:
=true;
appsvr:
=( appServer as IAppService);
logsvr:
=(logServer as ILogService);
end;
procedure TForm1.FormDestroy(Sender:
TObject);
begin
ROChannel.Active:
=False;
end;
procedure TForm1.Button1Click(Sender:
TObject);
begin
if logsvr.login(edit1.Text,edit2.Text) then
showmessage('登陆成功')
else begin
showmessage('登陆失败');
end;
end;
procedure TForm1.Button2Click(Sender:
TObject);
begin
logsvr.logout(GUIDToString(ROMessage.ClientID));
end;
procedure TForm1.Button3Click(Sender:
TObject);
begin
showmessage(IntToStr(appsvr.Sum(3,5)));
end;
procedure TForm1.Button4Click(Sender:
TObject);
begin
showmessage('服务器 sessionID:
'+appsvr.GetSessionID+chr(13)+
'本地 sessionID:
'+GUIDToString(ROMessage.ClientID));
end;
end.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RemObject 服务端 配置 程序 编写