1

我正在将我的独立 Intraweb 应用程序作为服务运行。现在我需要实现一个将“心跳”时间戳写入数据库表的函数。我已经在使用 TService Classm 的其他服务应用程序中完成了此操作,我可以在其中使用 OnAfterInstall、OnExecute 等事件。

有没有办法可以在作为服务运行的独立 Intraweb 应用程序中使用这些事件?

感谢所有信息

沃尔夫冈

4

2 回答 2

2

我开始在我自己的 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;
于 2012-09-22T15:16:23.907 回答
0

Intraweb 支持 TIWTimer,因此向数据库发送时间戳应该非常简单。编码的细节取决于详细的规范。

于 2011-03-02T04:54:48.063 回答