Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

TServiceApplication   Найти похожие ветки 

 
TheChups   (2005-02-21 20:37) [0]

Всем привет, есть задача написать сервис, который бы являлся сервером для чата (то есть постоянно висел в памяти). Для этого использую 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, тк всё инфа необходимая для взаимодействия сервер - клиент хранится в ней. Весь код сервиса был сначала написан для обычного приложения, там и тестировался, всё работало без проблем. Вот и вопрос как мне реализовать всё это дело и в чём проблема?


 
Fay ©   (2005-02-21 22:47) [1]

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

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

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


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


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


ну судя по


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


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


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


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


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


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


 
Erik1 ©   (2005-02-22 11:43) [3]

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



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
14-1108546031
Ilya__
2005-02-16 12:27
2005.03.06
Какая функция в Делфи, убирает пробелы из строки?


3-1107867700
Ru
2005-02-08 16:01
2005.03.06
АРМ Расчет заработной платы


14-1108254728
Lancelot
2005-02-13 03:32
2005.03.06
Отмучился :)


9-1102282566
Domowoi
2004-12-06 00:36
2005.03.06
Облом с PowerDraw


9-1100945825
maxistent
2004-11-20 13:17
2005.03.06
"столкновение"