【发布时间】:2012-09-13 18:09:38
【问题描述】:
我们正在使用 Delphi XE 开发新的 Datasnap 服务器 (tcp/ip),但遇到了问题。我们不知道客户端何时以异常方式断开连接,即。连接断开或客户端电脑重新启动。
当客户端建立连接时,我们将其详细信息保存在列表中,如下所示:
TClientInfo = record
Id: integer;
Session: TDSSession;
LastSeen: TDateTime;
end;
...
ClientInfoList: TDictionary<Integer, TClientInfo>;
...
//OnConnect
ClientInfo.ClientId := ClientId;
ClientInfo.Session := TDSSessionManager.GetThreadSession;
ClientInfo.LastSeen := Now();
ClientInfoList.Add(ClientId, ClientInfo);
理想情况下,我们希望遍历 ClientInforList 并断开任何 30 分钟未见的客户端,但这是我遇到问题的地方。
我尝试如下断开或终止客户端会话,但没有任何运气。
for i in ServerContainer.ClientInfoList.Keys do
begin
ClientInfo := TClientInfo(ServerContainer.ClientInfoList[i]);
ClientInfo.Session.Terminate;
end;
在 Delphi XE 中有没有办法做到这一点?
【问题讨论】:
-
ServerClass.LifeCycle是如何设置的? [Server,Session,Invocation] -
生命周期设置为 [Session]。