一窥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',[10,20]);

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

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(34,7);

     // Traditional client.
     s:=client.Request('SMARTDEMO','','echostring',['abc']);
     s:=client.Request('SMARTDEMO','','EchoReversedString',['abc']);
     i:=client.Request('SMARTDEMO','','addnumbers',[10,20]);
end;

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

 

时间: 2024-09-20 19:39:34

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

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

kbmmw 5.0 以后支持smart service, 这个用起来非常方便,kbmmw 通过 定制属性来简化编程,可以参考我以前的文章.但是这个意味着使用单元引用一定要小心, 否则出了问题,都不知道怎么回事?浪费大量的时间. 前几天调试程序时,为了优化,把引用单元删除了一些,于是就出现了莫名奇妙的问题. 程序运行起来,无法响应,由于可以编译过去,因此没注意单元引用的问题. 出现的情况是这样的: 编译时只出现警告,但是可以运行. 但是不显示结果,把各种代码改了个遍,但是仍然没效果.  后来看到这

在Pocket PC中使用Web Service连接数据库

web|连接数据库 在Pocket PC中使用Web Service连接数据库前言微软的移动开发者大会在六月的北京举行了,国内的移动应用软件虽然是刚刚起步,但是这个前景宽广的领域已经受到越来越多软件厂商的关注了.移动设备上的商业应用尽管刚刚起步,但已经显示出巨大的发展潜力. 在微软移动开发挑战赛中,我的作品<饕餮元年无线餐饮管理系统>获得了商业应用的三等奖.为了实现Pocket PC与后台数据库服务器的连接,我的作品中使用了.Net CompactFramework和Web Service技术

在ASP.NET Atlas中调用Web Service—处理错误

asp.net|web|错误 在本系列的上一篇(在ASP.NET Atlas中调用Web Service--介绍及简单应用)中,我们熟悉了Atlas中调用Web Service的最基础方法,但是在实际开发中,仅仅发出请求并等待返回结果是不够的,我们大都需要考虑对错误超时等的处理,也要允许用户取消操作.幸运的是,Atlas对Web Service中的Web Method的封装也充分考虑到了这些需求.让我们举一个Web Method的例子来说明,例如,对于如下的Web Method: public

在ASP.NET Atlas中调用Web Service—批量调用以提高效率

asp.net|web 对于Atlas程序,在某些情况下,我们需要在短时间内调用大量的Web Service,例如某个列表中用户快速的点击删除.这时网络带宽,稳定程度等等往往会造成较长时间的延迟.如果可以将这些调用包装成一个单一的请求,那么用户只需忍受一次网络延迟,即可得到处理的结果,也间接的提高了效率.似乎这并不是一个很容易实现的功能,但幸运的是,Atlas中内建了对批量调用Web Service的支持,您所需要的只是在程序中简单设置一下. Atlas中每个Web Service的调用请求都有

在ASP.NET Atlas中调用Web Service

asp.net|web 在前一篇文章(在ASP.NET Atlas中调用Web Service--创建Mashup调用远端Web Service(基础知识以及简单示例))中,我介绍了一些Atlas中对远程Web Service进行Mashup的基础知识,并给出了一个最基础的没有丝毫用处例子.今天再回到这个话题上,我将给出一个更复杂点的,但有一些用处的例子--Yahoo! Weather. 废话到此为止,让我们先熟悉一下Yahoo! Weather服务:Yahoo!在其网站上提供了天气预报服务(h

在ASP.NET Atlas中调用Web Service—应用Cache减小服务器开销

asp.net|cache|web|服务器 对于一些复杂的,需要较长时间完成,并且对实时性要求不是很高的服务,选择Cache往往是一个有效的提高效率的方法..NET的Web Service实现充分考虑了对Cache的需求,您只需要简单的设定即可启用Cache.Atlas中对Web Service的调用也可以利用这一Cache机制,以减少服务器端不必要的开销. 要启用Web Service的Cache,您只需要在WebMethod的声明中添加如下属性: [WebMethod(CacheDurati

.NET中的Web service的开发

web .NET平台内建了对Web service的支持,包括Web service的构建和使用. 与其它开发平台不同,使用.NET平台,你不需要其他的工具或者SDK就可以完成Web service的开发了..NET Framework本身就全面支持Web service,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持.本节将带你用.NET创建和使用一个简单的Web service.要在.NET中创建Web service,你只需建立一个.asmx文件.这个文件中有一个WebSe

SSIS:在 SSIS 中使用 Web Service 以及 XML 解析

Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Service 接口来实现两 个不同平台的信息沟通. 记得第一次做 IPhone 手机客户端与服务器端交互的 Web Service 接口的时候,由于我们在客户端 开发和服务器端开发都没有 IOS 平台开发经验,白天有其它的项目,只能利用晚上的时间不断尝试.最 终在第三个通宵的时候,尝试搭建的第3套不同版本的 W

在WebSphere Portlet Factory中调用Web Service

通过 WebSphere Portlet Factory(WPF),开发者非常方便实现 Web Service 和 Portlets 的通信.开发者无需花费大量的时间去学习 SOAP,WSDL,XML schema(xsd) 等 Web Service 技术,使用 WPF 即可开发出健壮.功能强大的 Web Service 和实现对各种风格的 Web Service 的调用.WPF 隐藏了 Web Service 的内部实现细节,通过 WPF 的丰富的构建器自动生成 Web Service 和实