2010-11-04 3 views
1

Я запускаю свое автономное приложение Intraweb в качестве сервиса. Теперь мне нужно реализовать функцию, которая записывает метку «heartbeat» в таблицу базы данных. Я сделал это в другом сервисном приложении, которое использует TService Classm, где я могу использовать такие события, как OnAfterInstall, OnExecute и т. Д.Доступ к событиям при запуске приложения intweb как службы

Есть ли способ, которым я могу использовать эти события в автономном приложении intweb, работающем как служба?

Спасибо за всю информацию

Вольфганг

ответ

0

IntraWeb поддерживает TIWTimer, поэтому отправка метку времени к базе данных должно быть довольно просто. Специфика кодирования зависит от подробных спецификаций.

2

Я начал делать именно это в своем собственном приложении Intraweb, хотя из-за того, что IWServiceWizard скрывает данные службы, включая основной цикл Execute, я сделал все это на стороне сервера, я использовал Application Mode.

Я определил метод heartbeat для своего класса сеанса (RunSQL - это метод на моем собственном объекте D Accessonnay Data Access Layer, это может быть простая оболочка вокруг 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; 
Смежные вопросы