2010-11-04 34 views
1

我将我的Standalone Intraweb应用程序作为服务运行。现在我需要实现一个将 “心跳”时间戳写入数据库表的函数。我做了一个使用 的TService Classm在那里我可以使用像OnAfterInstall活动这等服务应用,OnExecute等将intraweb应用程序作为服务运行时访问事件

有没有一种方法,我可以使用,在一个独立的IntraWeb应用程序事件作为服务运行?

感谢所有信息

沃尔夫冈

回答

0

IntraWeb的支持TIWTimer,所以发送时间戳到数据库应该是相当简单的。编码的细节取决于详细的规格。

2

我开始在我自己的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; 
相关问题