在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. 激活 pycharm

    step1: 在本地 hosts 文件增加一行,windows 路径一般为:C:\Windows\System32\drivers\etc step2: 输入激活码 7SPIY8PDT7-eyJsaW ...

  2. 2019年华南理工大学程序设计竞赛(春季赛)-C-六学家的困惑

    题目链接:https://ac.nowcoder.com/acm/contest/625/C 题意:给定两个字符串,每次只能从两个字符串的两端取字符,求依次取字符后所构成的数字最大为多少. 思路:思路 ...

  3. NumPy 副本和视图

    NumPy 副本和视图 副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数 ...

  4. tf.trainable_variables()

    https://blog.csdn.net/shwan_ma/article/details/78879620 一般来说,打印tensorflow变量的函数有两个:tf.trainable_varia ...

  5. python中matplotlib所绘制的图包含了很多的对象

    上图中的top=‘off’意思是说顶部的grid lines 看不见. 去除frame,意思就是将这个矩形给去除掉,spine意思是脊柱 bars = plt.bar(pos, popularity, ...

  6. RxJS之catchError

    Catches errors on the observable to be handled by returning a new observable or throwing an error. 返 ...

  7. 服务器使用VMware系软件管理主机集群

    在服务器安装ESXI 6.0系统,此系统300多M,用于管理服务器上的主机. 其他主机安装个vsphere client连接后可ESXI系统可进行简单管理 如果要更强大的功能,需要安装vcenter ...

  8. f5申请并激活License

    建议在图形界面下进行激活BIG-IP设备License的操作.正式设备第一次开机时会自带一个激活码,但仍然需要激活License才能使用. 如果BIG-IP设备可以访问因特网的话,可以使用自动模式激活 ...

  9. #define INVSQRT2 0.707106781 平方根倒数速算法

    转自 http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html 源码下载地址:http://diducoder.com/sotr ...

  10. 基于.net技术的 Rss 订阅开发

    RSS(Really Simple Syndication,真正简单的连锁)是一种 Web 内容连锁格式.RSS 成为通过 Web 连锁新闻内容的标准格式.刚好我现在vs的环境也是.net,因为在.N ...