kbmMW—制作一个简单服务

今天仿着delphi窑洞洞主的例子做一个kbmMW 简单服务,功能是客户端调用服务器端的过程,完成一个累加的功能,并且与洞主的内容作比较,看升级后kbmMW的异同。以下部分是洞主的内容。

环境:DelphiXE10.2.2+kbm5.02

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

kbmMW—制作一个简单服务

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

对应的属性如下:(基本没有怎么设置,都是默认)

kbmMW—制作一个简单服务

kbmMW—制作一个简单服务

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

ip0.0.0.0代表侦听本机所有的ip 地址。

Server属性:kbmMWServer1

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

kbmMW—制作一个简单服务

ok,就出现了kbmMW的服务向导。

kbmMW—制作一个简单服务

选择simple service 。这就是制作一个简单服务的向导。新的版本是红圈圈出来的两个选项。指的是listBox里的内容要不要排序。默认是不排序,另一个是按描述的内容排序。点下一步。

kbmMW—制作一个简单服务

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

现在只有一个版本,因此版本号可以随便写,但是注意,这个版本号要填写,我自己曾经乱写,并在后面设置的时候与这个版本号不一致,导致无法得到计算结果。点下一步

kbmMW—制作一个简单服务

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

kbmMW—制作一个简单服务

kbmMW—制作一个简单服务

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

kbmMW—制作一个简单服务

下一步

kbmMW—制作一个简单服务

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

kbmMW—制作一个简单服务

kbmMW—制作一个简单服务

点“绿勾”按钮后就完成这一系列向导操作。最后会显示一个新创建出来的窗口出来。

kbmMW—制作一个简单服务

现在就生成了这个服务的代码,并将累加的代码加上:

unit Unit2;

 

// =========================================================================

// kbmMW - An advanced andextendable middleware framework.

// by Components4Developers(http://www.components4developers.com)

//

// Service generated by kbmMWservice wizard.

//

// INSTRUCTIONS FORREGISTRATION/USAGE

//-----------------------------------

// Please update the usesclause of the datamodule/form the TkbmMWServer is placed on by adding

// YourServiceUnitName to it.Eg.

//

//     uses ...,kbmMWServer,YourServiceUnitName;

//

// Somewhere in yourapplication, make sure to register the serviceclass to the TkbmMWServerinstance. Eg.

//

// var

//    sd:TkbmMWCustomServiceDefinition;

// ..

//   sd:=kbmMWServer1.RegisterService(yourserviceclassname,false);

//

// Set the last parameter totrue if this is the default service.

//

 

 

 

{$I kbmMW.inc}

 

interface

 

uses

  SysUtils,

{$ifdef LEVEL6}

  Variants,

{$else}

  Forms,

{$endif}

  Classes,

  kbmMWSecurity,

  kbmMWServer,

  kbmMWServiceUtils,

  kbmMWGlobal;

 

type

  TkbmMWSimpleService2 =class(TkbmMWSimpleService)

  private

     { Private declarations }

  protected

     { Protected declarations }

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

     functionPerformsumall(ClientIdent:TkbmMWClientIdentity; const Args:array ofVariant):Variant; virtual;

  public

     { Public declarations }

{$IFNDEF CPP}class{$ENDIF}function GetPrefServiceName:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetVersion:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetAuthor:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetAssistance:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetSyntaxAbstract:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetSyntaxDetails:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetDescriptionAbstract:string; override;

{$IFNDEF CPP}class{$ENDIF}function GetDescriptionDetails:string; override;

{$IFNDEF CPP}class{$ENDIF} functionGetFlags:TkbmMWServiceFlags; override;

  end;

 

implementation

 

uses kbmMWExceptions;

 

{$R *.dfm}

 

 

// Service definitions.

//---------------------

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetPrefServiceName:string;

begin

     Result:='YRSrv';

end;

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetVersion:string;

begin

     Result:='1.0';

end;

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetAuthor:string;

begin

     Result:='YRSrv';

end;

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetAssistance:string;

begin

     Result:='[email protected]';

end;

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetSyntaxAbstract:string;

begin

     Result:='sumall';

end;

 

{$IFNDEF CPP}class{$ENDIF} functionTkbmMWSimpleService2.GetSyntaxDetails:string;

begin

     Result:='"sumall"';

end;

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetDescriptionAbstract:string;

begin

     Result:='这是一个返回累加值的服务。';

end;

 

{$IFNDEF CPP}class{$ENDIF} functionTkbmMWSimpleService2.GetDescriptionDetails:string;

begin

     Result:='"在这里写这个服务的详细描述。"';

end;

 

{$IFNDEF CPP}class{$ENDIF}function TkbmMWSimpleService2.GetFlags:TkbmMWServiceFlags;

begin

     Result:=[mwsfListed];

end;

 

 

// Master request processor.

//--------------------------

 

functionTkbmMWSimpleService2.ProcessRequest(const Func:string; constClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant;

var

   AFunc:string;

begin

     AFunc:=UpperCase(Func);

     if AFunc='SUMALL' then

        Result:=Performsumall(ClientIdent,Args)

     else Result:=inheritedProcessRequest(Func,ClientIdent,Args);

end;

 

 

// Functions published by theservice.

//------------------------------------

 

function TkbmMWSimpleService2.Performsumall(ClientIdent:TkbmMWClientIdentity;const Args:array of Variant):Variant;

var

   i:integer;

   mysum:integer;

begin

  // Enter code here to perform function sumall

  mysum:=0;

  for I := 1 to args[0] do

  begin

    mysum:=mysum+i;

 

  end;

  result:=mysum;

end;

 

 

end.

至此,我将整个工程分别保存为以下文件名:

工程文件名:YRSrvAppP

主窗体文件名:YRSrvAppU(主窗体名:YRSrvAppF

简单服务器文件名:YRSrvSmSrvU(主窗体名:YRSrvSmSrvF

 

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

uses

  YRSrvSmSrvU;//这是手动加入了简单服务器的引用

 

{$R *.dfm}

 

procedure TYRSrvAppF.FormCreate(Sender:TObject);

var

  sd:TkbmMWCustomServiceDefinition;

begin

  sd:=kbmMWServer1.RegisterService(TYRSrvSmSrvF,false);  // 这里把我们生成的服务注册,以便服务器调用

end;

 

procedureTYRSrvAppF.sButton1Click(Sender: TObject);

begin

  kbmMWServer1.Active:=True;

end;

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

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

kbmMW—制作一个简单服务

其中两个主要控件的属性设置如下:

kbmMW—制作一个简单服务

kbmMW—制作一个简单服务

按钮的代码如下:

procedureTForm1.sButton1Click(Sender: TObject);

  var

  args:array[0..1] of Variant; // 给服务器端的参数

  v:Variant; // 服务器端返回的参数

begin

 args[0]:=100;

 v:=kbmMWSimpleClient1.Request('YRSrv','','SUMALL',args);  // 调用远程服务

  sMemo1.Lines.Add(v);

end;

运行结果为:

kbmMW—制作一个简单服务

至此,kbmMW简单的远程服务就好了。


参考文档:(delphi窑洞洞主)http://www.cnblogs.com/xalion/tag/KBMMW/

相关文章:

  • 2021-10-19
  • 2021-06-26
  • 2022-12-23
  • 2021-11-16
  • 2021-05-19
  • 2022-12-23
  • 2021-12-17
  • 2021-12-17
猜你喜欢
  • 2022-12-23
  • 2022-01-20
  • 2021-09-15
  • 2021-10-18
  • 2021-11-02
  • 2021-06-07
  • 2021-12-17
相关资源
相似解决方案