Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отладка NT-сервиса и все-все-все / 10 сообщений из 10, страница 1 из 1
01.12.2003, 17:15
    #32339767
Dimkas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
День добрый, уважаемые!

Первый раз в жизни пришлось писать NT-сервис. Пишу на Delphi 5, используя для доступа к Oracle компоненты DOA 3.4.6.
Задача сервиса: периодически загружать в БД данные из файлов собственного формата.
Что уже работает: почти всё ;), т.е. сервис благополучно запускается, считывает параметры загрузки данных из реестра, стартует процесс загрузки, частично выполняет (90%) и тихонечко срубается :(
Вот и возникает ряд вопросов:
1. Как вообще отлаживать сервисы? Прежде всего интересует пошаговая отладка, т.к. разного рода LogMessage() это конечно хорошо, но как то геморойно.
2. Какие есть практические ограничения при написании сервисов, кроме указанного в хелпе "не использовать Forms и Http"?

Быть может у кого-либо есть практический опыт?
...
Рейтинг: 0 / 0
01.12.2003, 17:52
    #32339839
Shev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
Я при работе службы пишу весь процесс работы (подробный) в текстовой файл. И не отключаю логи даже когда устанавливаю сервис на эксплуатацию, т.к. если допустим спустя месяц служба срубится, то можно будет посмотреть как выполнялся ход работы.

А при создании службы я поступаю следующим образом:
Пишу обычное приложение с рабочим потоком, который потом будет крутиться у службы. Его тестирую, (можно с пошаговой отладкой). При этом поток и весь другой рабочий код распологаю в отдельном модуле (.pas файле) ну или нескольких модулях.
Затем вставляю эти отлаженные модули в свой шаблончик, который создан для служб. Там остается их только подключить, немножечко дописать инициализацию потока и все ок!
Если в будущем требуется что то менять в коде, то опять же пишу и отлаживаю в тестовом приложении, затем простое копирование и компиляция службы.

p.s. Одна из моих служб тоже загружает в БД данные из текстового файла. Пока никаких проблем (почти) не создает.
...
Рейтинг: 0 / 0
02.12.2003, 07:07
    #32340110
Dimkas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
У меня тоже есть тестовое приложение, в котором есть просто 3 кнопки: старт, пауза, стоп. Дык в нём то всё благополучно работает, т.е. поток стартует и, как ему и положено, периодически выполняет свои функции. А когда я на базе тех же модулей собираю сервис, то он сваливается. Отсюда и возникли вопросы...
...
Рейтинг: 0 / 0
02.12.2003, 07:52
    #32340130
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
А сервис и база на одной машине висят?
Если нет, то сервис должен валиться при попытке соединения с базой (при перезагрузке компа, до логона в домене, у клиента IP - левый).

Если сервис нормально работате как тестовое приложение, попробуй:
пингани базу (tnsping) из сервиса (в какой-нить файл) и посмотри результат.





eNose
...
Рейтинг: 0 / 0
02.12.2003, 08:10
    #32340135
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
может прегодится. я заметил что в сервисе текущая дериктория по умолчанию является не папка откуда стартовал сервис, а WinNT\system32 (D5SP1 Win2000SP4)
...
Рейтинг: 0 / 0
02.12.2003, 08:23
    #32340143
Dimkas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
to eNose:
сервис и база на разных машинах, но это жить не мешает. прикол то в том, что бОльшая часть работы выполняется, а в конец сервис слетает... мне говрят "надо писать Synchronize!", а чего синхронизировать и с чем я не понимаю ;)
...
Рейтинг: 0 / 0
02.12.2003, 08:25
    #32340145
Shev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
Во первых необходимо разобраться с безопасностью.
Когда у тебя поток стартует из тестового приложения, он работает от имени залогиневшегося пользователя.
А когда как служба, то от имени LocalSystem (если ты не указывал пользователя, от которого запускать службу), которая к базе доступа не имеет. Естественно это все применительно для WinNT аудентификации на SQL сервере.

Также хотелось бы поподробнее узнать, что сервису удается сделать, т.е. что входит в 90%?
...
Рейтинг: 0 / 0
02.12.2003, 08:32
    #32340148
Dimkas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
безопасность пока никакая ;)
при подключении к Oracle используется прямое указание пользователя и пароля.
90% - это значит что почти все данные, которые необходимо закачать в БД, туда попали. Например, надо закачать 2018 записей, 2000 закачиваются, а 18 нет :( У меня уже такое подозрение, что поток просто закрывается раньше чем данные зафиксировались в базе, но что-то не догоняю, как ему сказать подождать ;)
...
Рейтинг: 0 / 0
02.12.2003, 09:36
    #32340193
Shev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
Оберни код потока в обработчик эксепшенов и выводи информацию об ошибке в лог, т.к. если происходит необработанное исключение в потоке, то поток прекращает свою работу, и уже не отзывается ни на какие сообщения. Может у тебя на 2001 строке кривые параметры серверу идут и поток слетает.
...
Рейтинг: 0 / 0
03.12.2003, 12:59
    #32341930
alr
alr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отладка NT-сервиса и все-все-все
2 Dimkas
Стартуем сервис.
Запускаем Delphi.
Меню Run->Attach to process... (находим процесс, соответствующий сервису).
Потом View->Debug windows->Modules.
Выбираем нужный модуль.
Дебугаем.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отладка NT-сервиса и все-все-все / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]