在kbmmw 的新版中(还没有发布),将会有一个叫做smart service 的服务。这种服务的属性基于服务器端,
并且可以自动注册服务名,下面就是一个简单例子代码。这个服务里面有有三个发布的函数:echostring,
EchoReversedString和AddNumbers。这些函数使用一些声明变量,包括“魔法”参数变量,以便访问不同的
客户端标识值。
 [kbmMW_Service('SMARTDEMO')]
TkbmMWCustomService2 = class(TkbmMWCustomSmartService)
private
protected
public
[kbmMW_Method]
function EchoString(const AString:string):string; [kbmMW_Method('EchoReversedString')]
function ReverseString(const AString:string;
[kbmMW_Arg(mwatClientIdentity)]
const AClientIdentity:TkbmMWClientIdentity
):string; [kbmMW_Method]
function AddNumbers(const AValue1,AValue2:integer;
[kbmMW_Arg(mwatRemoteLocation)]
const ARemoteLocation:string
):integer;
end; ...
function TkbmMWCustomService2.EchoString(const AString:string):string;
begin
Result:=AString;
end; function TkbmMWCustomService2.ReverseString(const AString:string;
const AClientIdentity:TkbmMWClientIdentity):string;
begin
Result:=StrUtils.ReverseString(AString);
end; function TkbmMWCustomService2.AddNumbers(const AValue1,AValue2:integer;
const ARemoteLocation:string):integer;
begin
Result:=AValue1+AValue2; // ARemoveLocation contains the reported remote location
// for the client.
end; initialization
// Make sure that RTTI is produced for the service class.
TkbmMWRTTI.EnableRTTI(TkbmMWCustomService2);
以上代码毫无疑问可以执行,但是最理想的是如何让他非常方便的增加新的函数,并且不用繁琐的加入
注册代码,并且让客户端访问。
可以通过调用kbmMWServer1.AutoRegisterServices来自动注册kbmMW_Service中定义的服务。 没有使用kbmMW_Arg绑定的声明自动的被看作声明值,并接受调用者传来的值。 例如 [kbmMW_Method]
function EchoString(const AString:string):string;
与一下代码相同
[kbmMW_Method]
function EchoString([kbmMW_Arg] const AString:string):string;
与一下代码也相同
[kbmMW_Method]
function EchoString([kbmMW_Arg(mwatValue)]
const AString:string
):string; 在客户端调用时的代码就如下:
    s:=client.Request('SMARTDEMO','','echostring',['abc']);
s:=client.Request('SMARTDEMO','','EchoReversedString',['abc']);
i:=client.Request('SMARTDEMO','','addnumbers',[,]);

还有更方便的客户端调用方法

procedure TForm1.Button1Click(Sender: TObject);
var
c:TkbmMWSmartClient;
s:string;
i:integer;
begin
// New smart client.
c:=TkbmMWSmartClientFactory.GetClient(Transport,'SMARTDEMO');
s:=c.EchoString('abc');
s:=c.EchoReversedString('abc');
i:=c.AddNumbers(,); // Traditional client.
s:=client.Request('SMARTDEMO','','echostring',['abc']);
s:=client.Request('SMARTDEMO','','EchoReversedString',['abc']);
i:=client.Request('SMARTDEMO','','addnumbers',[,]);
end;

由于目前新版还没有发布,目前只有这些内容。

一窥kbmmw中的 smart service的更多相关文章

  1. 使用kbmmw smart service 属性时的一个注意事项

    kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章.但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道 ...

  2. 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】

    一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...

  3. KBMMW 中 IOS IPv6 的解决

    自从今年苹果强制新上架的APP 必须支持Ipv6,很多原来需要网络支持的APP 就没法上架了. 别的我们就不说了,先说说kbmmw 中,如何解决这个问题. 要测试你的app 是否支持ipv6, 首先要 ...

  4. 珍惜每一滴水(kbmmw 中的内存调试)

    作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...

  5. 在指定时间干,必须干(kbmmw 中的事件调度)

    从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...

  6. 你会在C#的类库中添加web service引用吗?

    本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008 ...

  7. 找不到类型{0} 它在 ServiceHost 指令中提供为 Service 特性值

    由于我把binding改成wsHttpBinding,在web.config里也改了命名空间 services的类名也改成了跟 web.config对应的命名空间后 在添加引用后,出现了错误: “找不 ...

  8. Android中Activity、Service和线程之间的通信

    Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...

  9. 每日学习心得:找不到类型{0},它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素...中提供,cellspacing、rowspacing属性

    2013-7-6 1.                找不到类型“WCFService.Service1”,它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 syste ...

随机推荐

  1. linux同步机制

    很早之前就接触过同步这个概念了,但是一直都很模糊,没有深入地学习了解过,近期有时间了,就花时间研习了一下<linux内核标准教程>和<深入linux设备驱动程序内核机制>这两本 ...

  2. 数据库中where与having区别

    having 和where 都是用来筛选用的 having 是筛选组 而where是筛选记录 他们有各自的区别 1>当分组筛选的时候 用having 2>其它情况用where------- ...

  3. Linux下 MYSQL 主从复制、同步

    mysql从3.23.15版本以后提供数据库复制功能.利用该功能可以实现两个数据库同步,主从模式(A->B),互相备份模式(A<=>B)的功能. 主从模式(A->B)的配置过程 ...

  4. 运行msckf_vio

     MSCKF_vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计.其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中,在进行卡尔曼增益之前通过多帧图像之间的约束进行最小二乘优化来估计特征点 ...

  5. Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not mat

    Could not load file or assembly 'System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b ...

  6. js封装插件

    js方式: (function(){ var demo = function(options){ this.options = $.extend({ "x" : "1&q ...

  7. C语言中简单的for循环和浮点型变量

    浮点型变量:常数中带有小数点的叫做浮点型 以下用for循环写一个摄氏度和华氏度的转换的C程序 [见 http://www.linuxidc.com/Linux/2013-08/88513.htm ] ...

  8. 递归函数 day17

    一 递归函数 n = 1 金老板 38+2 =40n = 2 alex n+2= 金老板 36+2 = 38n = 3 wusir n+2 = alex wusir 36 def age(n): #n ...

  9. PHP 文件操作代码

    <?php //echo filetype("./1.jpg"); //判断文件类型 文件:file //echo filetype("./code"); ...

  10. iOS.FileSystem.HardLinkAndSymbolicLink

    关于iOS中的硬连接和符号连接(软连接),iOS其实是Unix的变体, 所以在这方面也继承了Unix的特性,下面这个连接比较详细的进行了 类比说明. 1. http://www.tanhao.me/p ...