TMS Xdata Server
Xdata 在TMS中扮演的桥的角色,一年前仔细看过TMS 的源码,当时对流程很清晰,随着时间慢慢的过去,现在该忘记的都忘记了。所以用此文章来记录自己对Xdata还剩下的一点点的记忆...
光有xdate是不能工作的,xdata的底层走的是sparkle,sparkle可以走indy,httpsys,或者其他通讯协议。具体参看下图(字写得不好,不要吐槽):
其中客户端可以使用xdata的客户端,同样也可以使用标准的http,https.进行访问。
关于数据加密和权限的问题,其实作者早就设计好了,在Sparkle层或者xdata Server都有,不过xdata Server层的用户密码访问是脱离掉Sparkle的,其实Sparkle层的用户账号和密码和权限接口已经开放,我不知道为什么xdata还要另外在做一套。关于ORM的设置我这里就不说了。
这里主要讲解下官网的Xdata 的Server服务。
1:初始化XdataServer,XdataServer层决定了Http,Https访问时候的一级地址。
其中BaseUrl为Server的一级地址。D
Dispatcher为使用底层sparkle通讯的组件。
ModelName这个是模型的名字,对应了后面Server定义时候的模型名。
2: 设置xdata层的用户名和密码。
1 2 3 4 5 6 | procedure TDataModule1 . XDataServer1ModuleCreate(Sender: TObject; Module: TXDataServerModule); begin Module . UserName := 'admin' ; Module . Password := '123456' ; end ; |
2: 创建一个服务端接口以及服务类
A): 服务接口创建
1 2 3 4 5 6 7 | [ServiceContract] [Model( 'System' )] //这里要对应xdata modelname的名字 [URIPathSegment( 'Demo' )] //这里对应于http访问二级路径名 ISystemService = interface (IInvokable) [ '{99BD59AA-8978-4D0F-8C04-65F8F05F5363}' ] [HttpGet] function Sum( A, B: double ) : double ; end ;<br> initialization <br> RegisterServiceType(TypeInfo(ISystemService)); //不要忘记注册,虽然进入是个空函数,好像经过测试必不可少 |
B): 服务类创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | type [ServiceImplementation] TSystemService = class (TInterfacedObject, ISystemService) public function Sum( A, B: double ) : double ; end ; function TSystemService . Sum(A, B: double ): double ; begin Result := A+B; end ; initialization RegisterServiceType(TSystemService); end . |
3: 客户端访问
1 2 3 4 5 | FClientSystem := TXDataClient . Create(TXDataAureliusModel . Get( 'System' )); // FClientSystem . Uri := 'http://localhost:89/Test/Demo' ; // FClientSystem . UserName := 'admin' ; FClientSystem . Password := '123456' ; double value := FClientSystem . Sum( 8 , 15 ); |
客户段中
TXDataAureliusModel.Get('System')其中'System'对应模型名字,如果不对应,那么后面访问的时候会出现找不到地址。
FClientSystem.Uri := 'http://localhost:89/Test/Demo'; uri的地址是组合出来的,
A): localhost:89/Test为XdataServer组件中BaseUrl的地址。
B): Demo是定义接口的时候,[URIPathSegment('Demo')]里面Demo的数据。你也可以定义其它的地址。
用户的密码和账号要对应Model初始化时候的账号和密码。
很简单吧,如果是普通Http的,
http://localhost:89/Test/Demo/Sum?a=8&b=9
会提示输入密码, 输入初始化的密码即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!