スタンドアロンのIntrawebアプリをサービスとして実行しています。次に、「ハートビート」タイムスタンプをデータベーステーブルに書き込む関数を実装する必要があります。これは、OnAfterInstall、OnExecuteなどのイベントを使用できるTServiceClassmを使用する他のサービスアプリで実行しました。
サービスとして実行されているスタンドアロンのイントラウェブアプリでそのイベントを使用する方法はありますか?
すべての情報をありがとう
ヴォルフガング
IWServiceWizard はメインの Execute ループを含むサービスの詳細を非表示にするため、すべてサーバー側で実行し、アプリケーション モードを使用していましたが、私は自分の Intraweb アプリケーションでこれを正確に実行し始めました。
セッション クラスにハートビート メソッドを定義しました (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;
これを行うと、(たとえば) ユーザーが新しい Web ページを開くたびにこのメソッドを呼び出すのは簡単でした。
procedure TIWMyPage.IWAppFormCreate(Sender: TObject);
begin
inherited;
Session.UpdateHeartbeat;
end;
これは、非同期イベント (AJAX) であっても、ユーザーがサーバーと通信する何かを行うときにも使用できます。
procedure TIWMyPage.btnRefreshAsyncClick(Sender: TObject;
EventParams: TStringList);
begin
Session.UpdateHeartbeat;
end;
Intraweb は TIWTimer をサポートしているため、タイムスタンプをデータベースに送信するのは非常に簡単です。コーディングの詳細は、詳細仕様に依存します。