![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TServerSocket в TService
Newfrost © (2007-02-26 08:52:00)Добрый день, уважаемый ALL, возник такой вопрос: пишу сервис, который должен общаться с клиентскими машинами по сети, кидаю на "форму" сервиса компонент TServerSocket, и задаю обработчики. Порт открывает как положено, но ни одно из событий не срабатывает(( С какими параметрами нужно запустить полученный экзешник, чтобы он стартанул как сервис (чтобы можно было отлаживать)
(Delphi 2006, Win Vista), но те же проблемы возникали и на других виндах (тестировал на XP и 2003)
Всем заранее спасибо!!!
Newfrost (2007-02-26 18:17:00) [1]Уважаемые! Всем огромное спасибо, особенно Сергею М.! Взаимодействие с рабочим столом, как выяснилось, и было камнем преткновения! Исправил - и все работает как надо!!! Пошел читать мануалы дальше...
Newfrost (2007-02-26 17:04:00) [2]Нет, мне в принципе, все равно как он будет работать, главное, чтобы мог работать с сетью, мне нужно обрабатывать запросы клиентских компов... user-mode приложение не пойдет, т.к. пользователь может быть не залогинен, тогда некому будет обрабатывать :(
Сергей М. (2007-02-26 16:16:00) [3]
> Newfrost (26.02.07 15:43) [7]
Твой сервис взаимодействует с раб.столом ?
Newfrost (2007-02-26 15:43:00) [4]Собственно вот код, его тут три строки, что в отдельном потоке, что в главном, никакой разницы, не обрабатываются сообщения...
procedure TService1.ServiceExecute(Sender: TService);
begin
ServerSocket1.Port := 9999;
ServerSocket1.Active := true;
while (not Terminated) do
ServiceThread.ProcessRequests(False);
end;
Сергей М. (2007-02-26 14:06:00) [5]
> Буду пытаться засунуть все это в отдельный поток и сделать
> сокет блокирующим
Не обязательно.
Можно оставить сервер в неблок.режиме и организовать в потоке сервиса цикл ожидания/выборки/диспетчеризации оконных сообщений.
Сергей М. (2007-02-26 14:04:00) [6]
> сервис запускается (через services.msc)
Ну а что ж ты тогда спрашиваешь, как его "стартануть" ?
Вот прямо так и стартуй !
А по поводу отладки сервисов читай справку по теме "Debugging service applications".
> не происходит событие OnClientRead
В какой момент времени ты активируешь TServerSocket ?
Newfrost (2007-02-26 13:52:00) [7]Ага, накопал вот что: сервисы не получают оконных сообщений, а работа с сокетами основана на них... Буду пытаться засунуть все это в отдельный поток и сделать сокет блокирующим... Отпишусь, если не получится...
Newfrost (2007-02-26 13:41:00) [8]Я бы с радостью разобрался, но не могу найти... Дело обстоит так: сервис запускается (через services.msc), порт открывается, когда подключаюсь и отправляю какие-либо данные не происходит событие OnClientRead (( Почитал на разных форумах, ответов нигде нет( Был бы очень признателен, если бы мне открыли глаза на то, куда нужно смотреть...
Сергей М. (2007-02-26 10:56:00) [9]
> С какими параметрами нужно запустить полученный экзешник,
> чтобы он стартанул как сервис (чтобы можно было отлаживать)
Какое отношение это имеет к
> ни одно из событий не срабатывает
?
Ты уж сначала разберись досконально с регистрацией и спецификой работы сервисов как таковыхи только потом начинай "пичкать" свои сервисы конкретной функциональностью, в т.ч. TServerSocket
SergGG (2007-02-26 10:54:00) [10]ExeName /Install