【发布时间】:2017-06-07 16:18:33
【问题描述】:
我正在使用 REST 和 json 运行一些 Datasnap 测试。
Delphi 自己创建的 Unit ServerMethods 中有“ReverseString”功能,但是,我怎么知道是谁发送的呢?
我想保留调用此方法的客户的信息日志。
我知道它可以作为参数传递,但客户端有责任将此信息传递给我,我不希望这样,假设该方法将是公开的,并且多个客户端将触发此信息.如果我不通过服务器的控制直接获取信息,我很容易失去这种控制。
我在网上发现,在ServerConteiner单元中,有一个“DSServer”对象,这个对象有一个名为“OnConnect”的事件,所以可以得到如下sa数据:
Procedure TServerContainer1.DSServer1Connect (
DSConnectEventObject: TDSConnectEventObject);
Begin
DSConnectEventObject.ChannelInfo.ClientInfo.IpAddress;
DSConnectEventObject.ChannelInfo.ClientInfo.ClientPort;
DSConnectEventObject.ChannelInfo.ClientInfo.Protocol;
DSConnectEventObject.ChannelInfo.ClientInfo.AppName;
End;
但我无法在 ServerMethods.ReverseString 中找到如何获取这些数据...
我认为处理是在服务器上的线程中进行的,所以我不能将此值作为全局值传递,因为它可以从其他同时连接的连接中获取信息。
在方法ReverseString中,我尝试如下:
Var
ADSServerClass: TDSServerClass;
Begin
ADSServerClass: = TDSServerClass (GetOwner);
TDSServer (ADSServerClass.Server). ???
// I got to the server, but I can not find it, and I do not know if it is this way to find the data of who is requesting me to execute the ReverseString
End;
【问题讨论】:
-
如果您在 Delphi Samples\Object Pascal\DataSnap 文件夹中搜索 - Files in Files for ReverseString,它将带您到各种调用 ReverseString 方法的演示。另外,如果你在谷歌上搜索'delphi "servermethods" 教程,你会发现类似这样的内容:youtube.com/watch?v=C8iqCk4O6Tg
-
我曾尝试做类似的事情但失败了。 “连接级别”信息(servercontainerunit)在“应用程序级别”(servermethodsunit)中不可用。