我正在将我的独立 Intraweb 应用程序作为服务运行。现在我需要实现一个将“心跳”时间戳写入数据库表的函数。我已经在使用 TService Classm 的其他服务应用程序中完成了此操作,我可以在其中使用 OnAfterInstall、OnExecute 等事件。
有没有办法可以在作为服务运行的独立 Intraweb 应用程序中使用这些事件?
感谢所有信息
沃尔夫冈
我开始在我自己的 Intraweb 应用程序中执行此操作,但因为 IWServiceWizard 隐藏了包括主执行循环在内的服务详细信息,所以我在服务器端完成了所有操作,我使用的是应用程序模式。
我在我的会话类上定义了一个心跳方法(RunSQL 是我自己的数据访问层对象 DBConnection 上的一个方法,这可能是一个简单的 TADOConnection 包装器)。
function TIWUserSession.UpdateHeartbeat: boolean;
var
sSQL : string;
begin
sSQL := 'UPDATE Heartbeats SET LastComms = getdate()'+
' WHERE SessionID = '+ IntToStr(FSessionID);
Result := DBConnection.RunSQL(sSQL);
end;
一旦我这样做了,每当用户打开一个新网页时调用这个方法(例如)就很简单了。
procedure TIWMyPage.IWAppFormCreate(Sender: TObject);
begin
inherited;
Session.UpdateHeartbeat;
end;
这也可以在用户执行与服务器通信的操作时使用,即使它是异步事件 (AJAX)。
procedure TIWMyPage.btnRefreshAsyncClick(Sender: TObject;
EventParams: TStringList);
begin
Session.UpdateHeartbeat;
end;
Intraweb 支持 TIWTimer,因此向数据库发送时间戳应该非常简单。编码的细节取决于详细的规范。