我将我的Standalone Intraweb应用程序作为服务运行。现在我需要实现一个将 “心跳”时间戳写入数据库表的函数。我做了一个使用 的TService Classm在那里我可以使用像OnAfterInstall活动这等服务应用,OnExecute等将intraweb应用程序作为服务运行时访问事件
有没有一种方法,我可以使用,在一个独立的IntraWeb应用程序事件作为服务运行?
感谢所有信息
沃尔夫冈
我将我的Standalone Intraweb应用程序作为服务运行。现在我需要实现一个将 “心跳”时间戳写入数据库表的函数。我做了一个使用 的TService Classm在那里我可以使用像OnAfterInstall活动这等服务应用,OnExecute等将intraweb应用程序作为服务运行时访问事件
有没有一种方法,我可以使用,在一个独立的IntraWeb应用程序事件作为服务运行?
感谢所有信息
沃尔夫冈
IntraWeb的支持TIWTimer,所以发送时间戳到数据库应该是相当简单的。编码的细节取决于详细的规格。
我开始在我自己的Intraweb应用程序中完成此操作,但由于IWServiceWizard隐藏了包括主Execute循环在内的服务详细信息,所以我在服务器端完成了所有操作,我使用的是应用程序模式。
我在会话类中定义了一个心跳方法(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;