使用delphi 开发多层应用(五)第一个kbmMW 服务例子

简介: 我们今天做一个kbmMW 简单服务,功能是客户端调用服务器端的过程,完成一个累加的功能。 首先我们建立一个空白的vcl form 应用程序,并放置几个控件,如图所示: 其中有三个控件,一个kbmMWSever1,一个kbmMWTCPIPIndyServerTransport1,还有一个就是启动按钮。

 我们今天做一个kbmMW 简单服务,功能是客户端调用服务器端的过程,完成一个累加的功能。

首先我们建立一个空白的vcl form 应用程序,并放置几个控件,如图所示:

其中有三个控件,一个kbmMWSever1,一个kbmMWTCPIPIndyServerTransport1,还有一个就是启动按钮。

对应的属性如下:

 

并设置kbmMWTCPIPIndyServerTransport  的bindings 的ip 为0.0.0.0,端口为3000。

ip为0.0.0.0 代表侦听本机所有的ip 地址。

然后点file->new->others... 出现kbmMW service wizard.

点ok,就出现了kbmMW 丑陋的服务向导,

我们今天的任务很简单,选择simple service . 点下一步。

输入服务名,这个必须要注意,以后所有的调用都需要,我们这里把服务命名为xalion_srv.

现在只有一个版本,因此版本号可以随便写。点下一步

这里是可选的,为了以后方便,可以把服务的说明写在这里。后面几个也是可选页面

下面到服务标志的选择,我们这里就使用默认的值,以后需要高级服务时,可以在设置其他项。

下一步

 

在这里,我们把要定义的函数名到右面的listbox 里面。点下一步,出现最后的界面:

现在就生成了这个服务的代码:

{$I kbmMW.inc}

interface
uses
SysUtils,
{$ifdef LEVEL6}
Variants,
{$else}
Forms,
{$endif}
Classes,
kbmMWSecurity,
kbmMWServer,
kbmMWServiceUtils,
kbmMWGlobal;

type
Txalionsrv = class(TkbmMWSimpleService)
private
{ Private declarations }
protected
function ProcessRequest(const Func:string; const ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; override;
function Performsumall(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; virtual;
{ Protected declarations }
public
{ Public declarations }
{$IFNDEF CPP}class{$ENDIF} function GetPrefServiceName:string; override;
{$IFNDEF CPP}class{$ENDIF} function GetVersion:string; override;
{$IFNDEF CPP}class{$ENDIF} function GetSyntaxAbstract:string; override;
{$IFNDEF CPP}class{$ENDIF} function GetFlags:TkbmMWServiceFlags; override;
end;

implementation

uses kbmMWExceptions;

{$R *.dfm}


// Service definitions.
//---------------------

{$IFNDEF CPP}class{$ENDIF} function Txalionsrv.GetPrefServiceName:string;
begin
Result:='xalion_srv';
end;

{$IFNDEF CPP}class{$ENDIF} function Txalionsrv.GetVersion:string;
begin
Result:='1.0';
end;

function Txalionsrv.Performsumall(ClientIdent: TkbmMWClientIdentity;
const Args: array of Variant): Variant;
var
i:integer;
mysum:integer;
begin
mysum:=0;
for I := 1 to args[0] do
begin
mysum:=mysum+i;

end;
result:=mysum;

end;

function Txalionsrv.ProcessRequest(const Func: string;
const ClientIdent: TkbmMWClientIdentity;
const Args: array of Variant): Variant;

var
AFunc:string;
begin
AFunc:=UpperCase(Func);
if AFunc='SUMALL' then
Result:=Performsumall(ClientIdent,Args)
end;

{$IFNDEF CPP}class{$ENDIF} function Txalionsrv.GetSyntaxAbstract:string;
begin
Result:='sumall(n)';
end;

{$IFNDEF CPP}class{$ENDIF} function Txalionsrv.GetFlags:TkbmMWServiceFlags;
begin
Result:=[mwsfListed];
end;

现在回到我们的主界面,添加一下代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
kbmMWServer1.Active:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
sd:TkbmMWCustomServiceDefinition;
begin
sd:=kbmMWServer1.RegisterService(Txalionsrv,false); // 这里把我们生成的服务注册,以便服务器调用

end;

ok,我们的服务器端就完成了,可以编译运行了。

 

现在我们来做客户端程序。客户端就很简单,界面如下图:

其中两个控件的属性如下:

按钮的代码如下:

procedure TForm2.Button1Click(Sender: TObject);
var
args:array[0..1] of Variant; // 给服务器端的参数
v:Variant; // 服务器端返回的参数
begin
args[0]:=100;
v:=kbmMWSimpleClient1.Request('xalion_srv','','SUMALL',args); // 调用远程服务
memo1.Lines.Add(v);

end;

end.

运行结果为

好了,这个简单的远程服务就好了,还算简单吧。

 




目录
相关文章
|
7月前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=>`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
45 5
|
7月前
|
前端开发
【前端学习】—箭头函数和普通函数的区别(十四)
【前端学习】—箭头函数和普通函数的区别(十四)
|
机器学习/深度学习 搜索推荐 算法
编程艺术 - 第二章 、俩个字符串是否包含问题以及扩展
编程艺术 - 第二章 、俩个字符串是否包含问题以及扩展
72 0
理解 Delphi 的类(一) - 从结构/记录谈起
理解 Delphi 的类(一) - 从结构/记录谈起
131 0
理解 Delphi 的类(一) - 从结构/记录谈起
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(下)
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(下)
147 0
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(下)
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(上)
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(上)
166 0
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(上)
|
缓存 Windows
Windows程序设计——WNDCLASS结构参数及其用法
Windows程序设计——WNDCLASS结构参数及其用法
398 0