为了调试的原因,我尝试跟踪会话创建/销毁。许多网站引用Mat DeLong的代码来处理TDSSessionManager.Instance.AddSessionEvent,例如,参见文档http://mathewdelong.wordpress.com/category/rad-studio/xe2/,向下滚动到“会话管理”一章。我应该在哪里调用TDSSessionManager.Instance.AddSessionEvent?
有它读取...
TDSSessionManager.Instance.AddSessionEvent(
procedure(Sender: TObject; const EventType: TDSSessionEventType;
const Session: TDSSession)
begin
case EventType of
SessionCreate: (* session was created *);
SessionClose: (* session was closed *);
end;
end);
好像beeing用于旧式帕斯卡尔我已经错过了一些新的语言constructus OOP添加的。
TDSSessionManager是一个类型,而不是实际的对象。某人如何调用某种类型的代码?我会有这样的想像
var SessionManager : TDSSessionManager;
begin
SessionManager := TDSSessionManager.Create;
...
SessionManager.AddSessionEvent(MySessionHandler);
end;
但是等等。我同时阅读了更多关于“Singleton”TDSSessionManager的内容。只能有一个这种类型的对象,所以TDSSessionManager.Instance只能指向一个真实对象,我将它命名为“SessionManager”,这就是它的工作原理。这个理论是真的吗?
第二个神秘的事情是他如何将他的事件处理程序的代码放入调用者的参数部分。我本来期望像
Procedure MySessionHandler(Sender: TObject; const EventType: TDSSessionEventType;
const Session: TDSSession)
begin
case EventType of
SessionCreate: (* session was created *);
SessionClose: (* session was closed *);
end;
end;
....
Procedure StartMyServer;
begin
...
TDSSessionManager.Instance.AddEventHandler(MySessionHandler);
...
end;
请问这是可能的,等同于德隆的代码?
感谢详情
Armin。
有几个明显的地方可以尝试,比如窗体或数据模块的OnCreate事件处理程序。你尝试过哪些地方*没有工作? – 2014-09-22 15:30:45
Hi Rob,TDSSessionManager是REST Datasnap生态系统的一部分,我正在讨论REST datasnap应用程序。对不起,我没有在第一篇文章中介绍过这个。 – Armin 2014-10-20 14:54:18
感谢您的回复,但我不太清楚您的回复如何解决我提出的问题。你有哪些任务部分有问题? – 2014-10-20 15:21:56