一窥kbmmw中的 smart service
在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的更多相关文章
- 使用kbmmw smart service 属性时的一个注意事项
kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章.但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道 ...
- 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】
一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...
- KBMMW 中 IOS IPv6 的解决
自从今年苹果强制新上架的APP 必须支持Ipv6,很多原来需要网络支持的APP 就没法上架了. 别的我们就不说了,先说说kbmmw 中,如何解决这个问题. 要测试你的app 是否支持ipv6, 首先要 ...
- 珍惜每一滴水(kbmmw 中的内存调试)
作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...
- 在指定时间干,必须干(kbmmw 中的事件调度)
从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...
- 你会在C#的类库中添加web service引用吗?
本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008 ...
- 找不到类型{0} 它在 ServiceHost 指令中提供为 Service 特性值
由于我把binding改成wsHttpBinding,在web.config里也改了命名空间 services的类名也改成了跟 web.config对应的命名空间后 在添加引用后,出现了错误: “找不 ...
- Android中Activity、Service和线程之间的通信
Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...
- 每日学习心得:找不到类型{0},它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素...中提供,cellspacing、rowspacing属性
2013-7-6 1. 找不到类型“WCFService.Service1”,它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 syste ...
随机推荐
- Django 常见错误总结
1,在 Django 的框架中,从view中对文本文档进行处理的过程中,发现总是找不到对应的 .txt 文件,而在同级目录下面的 tests.py(自己新建的 py 文件)中却能找到,后来发现还是路径 ...
- 缩点+出入度 poj1236
题目链接:https://vjudge.net/contest/219056#problem/H 题意:先输入n,代表接下来有n个点,接下来n行,第i行里面的数(假设是)a,b...0(到0表示结束) ...
- 【python中单链表的实现】——包括初始化、创建、逆序、遍历等
# coding=utf-8 class mynode(object): def __init__(self, data, nextnode = None): self.data = data sel ...
- TZOJ 3305 Hero In Maze II(深搜)
描述 500年前,Jesse是我国最卓越的剑客.他英俊潇洒,而且机智过人^_^.突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中.Jesse听说这个消息已经是两天以后了,他急忙赶到迷宫,开 ...
- JAVA EXAM3 复习提纲
[Practice11_Zipcode_ArrayList] Zipcode class: //3 variables: zipcode, city, county, and compare by c ...
- 交叉编译python2.7.7
一.python下载网址: http://www.python.org/ftp/python/ 二.python的交叉编译依赖openssl ,openssl的下载网址: https://www.op ...
- mysql5.7 生成列 generated column
生成列的值是根据列定义中的表达式计算得出的. mysql5.7支持两种类型的生成列: 1.virtual 生成列:当从表中读取记录时,才计算该列值.不会把数据持久化在硬盘上. 2.stored 生成列 ...
- vuex,文件夹整理
不多说直接上图 1,执行事件和调用 2添加模块 3模块内执行过程
- Jmeter常用脚本开发之Beanshell Sampler
Beanshell Sampler Beanshell介绍:是一种完全符合java语法规范的脚本语言,且又拥有自己的一些语法和方法:是一种松散类型的脚本语言:它执行标准java语句和表达式,另外它还包 ...
- PAT 1002 写出这个数 (20)(代码)
1002 写出这个数 (20)(20 分) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100 ...