一窥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 ...
随机推荐
- 51nod 1459 迷宫游戏 dijkstra模板
链接:迷宫游戏 问题 - 51Nod http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 1459 迷宫游戏 基准 ...
- APP内的H5页面测试方法, 移动端的浏览器(例如UC浏览器)测试方法
前言: 用appium做UI自动化,测试APP里面的H5和测试手机浏览器打开的H5的操作流程上是有所区别的.比如要测试APP内嵌的H5需要先操作appium启动APP,然后通过context切到web ...
- ajax请求跨域
解决方式 1: 解决方式 2: 服务端: package ceshi_utils; import java.util.*; import com.xwhb.utils.encrypt.CipherUt ...
- 【git】gitignore
gitignore git专门有个文件用来管理那些不被纳入版本库的文件,这个文件是 [.gitignore],所有不被包含的都能放进去,但这个是有前提的. 前提 前提是文件如果没被git客户端trac ...
- [剑指Offer]39-数组中出现次数超过一半的数字(快排延申,找第k大数同理)
题目链接 https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&t ...
- vue2.0跨域携带cookie和IE兼容
/*vue-resource为了跨域获取到cookie做的操作*/ 1vue-resource跨域问题Vue.http.interceptors.push(function(request, next ...
- webstorm安装配置
1.webstorm是一款优秀的前端设计工具,在官网下载webstorm.exe文件 官网地址:http://www.jetbrains.com/webstorm/ 2.一直next执行下一步进行安装 ...
- 22.Mysql磁盘I/O
22.磁盘I/O问题磁盘IO是数据库性能瓶颈,一般优化是通过减少或延缓磁盘读写来减轻磁盘IO的压力及其对性能的影响.增强磁盘读写性能和吞吐量也是重要的优化手段. 22.1 使用磁盘阵列 RAID(Re ...
- C++树的插入和遍历(关于指针的指针,指针的引用的思考)
题目 写一个树的插入和遍历的算法,插入时按照单词的字典顺序排序(左边放比它"小"的单词,右边放比它"大"的单词),对重复插入的单词进行计数. 程序源码 #inc ...
- Hadoop(四)shell脚本定时采集日志数据到hdfs
#!/bin/bash #set java envexport JAVA_HOME=/wocloud/java/jdk1.7.0_45export JRE_HOME=${JAVA_HOME}/jree ...