[客户端基于delphi]
1>选择基于阻塞模式的Indy通信套件作为通信工具;(可使delphi代码更简洁)
2>选择tcp/ip作为通信协议;(可选择web service,http,主要看appserver的架设情况;甚至可以在tcp/ip的基础上自定义通信协议)
3>选择XML或变长字符串或文件,内存流作为数据包传递信息;
数据节点的结构:
|------------|------------|------------|-----------|
| 长度 |数据 |长度 |数据 |
|------------|------------|------------|-----------|
说明:
1. 长度为其后数据串的长度的长度串;
2. 数据采用变长方式组织;
一般数据包的结构:
|------------|------------|------------|-----------|------------|------------|------------|-----------|
| 名称长度 |名称 |值长度 |数据值 | 名称长度 |名称 |值长度 |数据值 |
|------------|------------|------------|-----------|------------|------------|------------|-----------|
4>查询数据:客户端发送查询命令到appserver,appserver解析命令;通过jdbc到数据库查询数据;
appserver再把查询的数据打包为符合TClientDataSet.XMLData要求的XML数据包返回到客户端;
5>更新数据:利用TClientDataSet.Delta的属性直接映射为insert,update,delete类型的SQL语句,然后发送到Appserver进行事务处理;
6>接口规划:
函数功能: 发送操作命令和数据到应用服务器
函数声明: function StreamCommand(ASendText:WideString;ASendStream:TStream=nil):TStream;stdcall;external 'Communication.dll';
参数说明: -------------------------------------------------------
参数名称 描述
-------------------------------------------------------
ASendText 要发送的字节数据(一般应包括命令信息)
-------------------------------------------------------
ASendStream 要发送的内存流或文件流等数据(默认为nil)
-------------------------------------------------------
函数说明:正常返回字节流数据(可能返回空串);异常返回nil;此函数一般供DLL中的接口函数调用;
用例:Result:=StreamCommand('013SelectCommand:045SELECT * FROM CRM_CUSTOMER WHERE B_COMPANY=1 :');
这个语句的意思是发送一个查询命令到AppServer,命令的内容为SELECT * FROM CRM_CUSTOMER WHERE B_COMPANY=1;
如果命令能正确执行,那么AppServer会把查询的结果打包发送到客户端,以字节流的形式返回.
函数功能: 查询单个数