(方法篇)
在过去客户端要调用远程服务器的方法需要通过在TLB里添加接口并且在服务器对象中实现,在DataSnap 2009中调用远程服务器的方法是基于delphi的RTTI机制的,想要一个类允许被远程调用需要做以下两点:
1.把该类和DSServerClass连接在一起
注意:DSServerClass必须设置要导出的类 否则会出现SOnGetClassNotSet的异常信息
2.该类必须使用$MethodInfo编译指令生成详细的RTTI信息
所以我们使用向导添加的ServerModule 不需要再手动添加$MethodInfo开关,同样我们也可以不用继承自 TDSServerModule来实现我们的ServerClass,只要从TPersistent继承一个类 并且用{$MethodInfo ON}和{$MethodInfo OFF}包围就可以输出成员函数到客户端。
注意:要输出的成员函数必须声明为public
客户端调用可以使用两种方法:
1.使用SqlServerMethod组件
通过设置其ServerMethodName属性来进行远程调用 使用Params属性来传递参数和结果值
2.使用本地代理类
选中SQLConnection组件,在右键菜单中单击Generate Datasnap client classe 生成代理类单元。
下面我们通过一个简单的DEMO来展示DataSnap 2009的远程方法调用,我们在服务端定义了4个输出的成员函数:
由于在DataSnap内部是使用TDBXValue来管理参数列表的,所以使用string等delphi语言自带的类型将会进行相应的映射。使用TDBXValue也是效率最高的,以下是可以作为参数使用的TDBXValue列表。
TDBXWideStringValue
TDBXAnsiStringValue
TDBXInt16Value
TDBXInt32Value
TDBXInt64Value
TDBXSingleValue
TDBXDoubleValue
TDBXBcdValue
TDBXTimeValue
TDBXDateValue
TDBXTimeStampValue
TDBXBooleanValue
TDBXReaderValue
TDBXStreamValue
我们分别使用SqlServerMethod和代理类完成对服务端Hello方法的调用
这里参数使用了索引值进行访问传递的顺序是从左到右添加到Params列表 返回值是在列表的最后一个位置,同样也可以使用 ParamByName(参数名称).Value的形式传递参数 返回值的名称默认是'ReturnParameter'。使用代理类调用的方法和调用本地方法区别不大 因为远程调用的具体过程已经被代理类封装可以看下代理类中生成的Hello方法。
我们看到代理类使用了比SqlServerMethod更低级的DBXCommand进行了封装 以更友好的方式给我们使用
下面我们用TStream返回一个结构体并且在客户端读出
服务端部分
注意:写完数据以后需要定位到头部 否则客户端得到的数据长度为0
客户端部分
最后一个函数演示了使用var和out关键字来返回参数,以下是可以使用这两个关键字的标量值类型:
boolean
SmallInt
Integer
Int64
Single
Double
AnsiString
String
TDBXTime
TDBXDate
再加上其他的参数类型
TStream
TDataSet
TParams
TDBXReader
TDBXConnection
但是在实际测试过程中发现在使用string类型做out和var的参数时 无法使用,跟踪发现源码中ansistring和 string的相关代码已经被注释掉 估计是有BUG存在所以不支持 以后应该可以修复。
以下摘自DSReflect单元的 procedure TDSMethodValues.AssignParameterValues(Parameters: TDBXParameterArray);
分享到:
相关推荐
DataSnap 2009学习范例.rar
Delphi XE7开发入门教程之DataSnap三层架构篇 主要是delphi 开发datasnap的案列 以前积分太多了,现在降下来 5个积分
分8个章节讲述了如何用Delphi XE8 DataSnap开发系统
《Delphi XE3 DATASNAP 开发实战篇》 附书源码
利用Delphi开发的DataSnap使用IIS服务器方式发布。
Delphi XE7开发入门教程之DataSnap三层架构篇-第一部分
本资源,演示了利用DataSnap 2009,通过方法调用方式,实现多层数据库应用的架构中,Blob字段的读写过程。 原创。 相关介绍文章: http://blog.csdn.net/ddqqyy/article/details/6646918
DataSnap REST C++PDF版 DataSnap REST 使用方法教程
datasnap2010 中文白皮书 datasnap2010 中文白皮书 datasnap2010 中文白皮书
Embarcadero公司刚刚出版了我新的基于一个小的现实世界的DataSnap应用程序的DataSnap开发白皮书, 几乎涵盖所有你能想象你在RAD Studio XE中 学习有关DataSnap多层应用程序开发的的内容:从简单 的服务器安全连接...
Datasnap 使用JSON 传递数据的简易方法.mht
cb2010_DataSnap_demo 从服务端的 access数据库读取数据到客户端,在C++Building2010下编译通过
DataSnap Demo:TFDConnection、最大连接数、客户端回叫功能、多线程模拟、压力测试等,编译环境XE6 Update 1
DELPHI DataSnap 实例
datasnap 白皮书 测试源码,自己编写的书的源码
1. 两个主要组件:TSQLConnection,TDSClientCallbackChannelManager 。...TDSClientCallbackChannelManager要指明通道名(ChannelName)、通信类型(CommunicationProtocol=TCP/IP)、服务器地址(DSHostname)及...
DataSnap客户端和服务端
delphi 2010 datasnap 聊天室源代码,来自易博龙网站
DATASNAP 的资料很少,初学者不错的资料