Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TServiceApplication [D7, WinXP]


TheChups ©   (2005-02-21 20:37:00) 

Всем привет, есть задача написать сервис, который бы являлся сервером для чата (то есть постоянно висел в памяти). Для этого использую Service Application. Беру пример из хелпа (благо смысл один и тот же). Изменяю событие вот так:

procedure TServerService.ServiceExecute(Sender: TService);
begin
// Это добавляю я
Init; // Загрузка настроек из файла
ContactList := TStringList.Create; // Здесь хранится список юзеров

ServerSocket.Active := True;
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
end;
ServerSocket.Active := False;
end;

И сервис сразу после загрузки операционки вываливается из памяти. Если процедуру Init закоментить, то сервис остаётся в памяти, но при этом не отвечает на запросы клиентов, хотя они к нему подключаюися без проблем. Такое ощущения что не создаётся переменная ContactList, тк всё инфа необходимая для взаимодействия сервер - клиент хранится в ней. Весь код сервиса был сначала написан для обычного приложения, там и тестировался, всё работало без проблем. Вот и вопрос как мне реализовать всё это дело и в чём проблема?


Erik1   (2005-02-22 11:43:00) [1]

Создай обычный поток и отладь его, а в сервисе(OnStart) запускай его. Получится двойная экономия и для сервиса подходит и в обычный exe слинковать можно. К томуже непридется на форум обращатся, по вопросам отладки.


Digitman   (2005-02-22 08:50:00) [2]


> в чём проблема?


ну судя по


> Если процедуру Init закоментить, то сервис остаётся в памяти


поиски источников проблем следует искать как минимум в Init
видимо, где-то там возбуждается исключение, которое ты не ожидал и никак не обрабатываешь


> но при этом не отвечает на запросы


а это уже иная проблема
разберись сначала с первой


> Такое ощущения что не создаётся переменная ContactList


не следует полагаться на ощущения, а нужно просто воспользоваться тем или иным способом отладки сервиса, чтобы иметь инф-цию о реально происходящем в его алгоритме


Fay   (2005-02-21 22:47:00) [3]

Я не очень-то разбираюсь в VCL-ных службах, но меня очень смущает
вот эта строка.
ContactList := TStringList.Create; // Здесь хранится список юзеров

IMHO, её место в конструкторе. А в ServiceExecute, полагаю, имеет смысл вставлять создание лишь специфичных для каждого коннекта объектов.

Здоровья Вам и счастья.


Наверх

Титульная страница Поиск, карта сайта Написать письмо