powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно в коде службы обработать её принудительное завершение?
4 сообщений из 4, страница 1 из 1
Как правильно в коде службы обработать её принудительное завершение?
    #38458123
BRS_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предыстория: была написана служба (служба №1), которая при запуске запускает таймер из метода OnStart.
Таймер срабатывает с определенной периодичностью и в методе OnTimer служба выполняет
различные манипуляции (метод1-получает почту, метод2-разбирает аттачи, метод3-заносит данные в БД).

Все было хорошо, пока не потребовалось перезагружать службу №1 раз в сутки.

Была написана служба (№2) которая в определенное время выполняла остановку и последующий запуск службы №1:

//упрощенный код остановки службы
Код: c#
1.
2.
ServiceController sc = new System.ServiceProcess.ServiceController(s_name_service);
sc.Stop();




Эксплуатация показала (так совпало по времени), что служба №2 останавливает службу №1 в середине метода2 (разбор аттачей).
И хотя метод2 обернут в try-catch с выводом ошибок в лог-файл и эвенты - никаких сообщений об ошибках в логах нет.

всё что есть в логах:

сработка таймера
метод1 - начал работу
метод1 - закончил работу
метод2 - начал работу
служба завершает работу (это OnStop службы пишет в лог)


Подскажите пожалуйста:

1) Можно из работающей службы (в моем случае №1) отлавливать, что её останавливают?

2) Есть ли какой-нибудь механизм взаимодействия между службами? Что бы служба №2 не останавливала службу №1, а послала ей команду "остановись" и служба №1 корректно завершила свои методы (с 1 по 3) и сама вызвала this.Stop()
...
Рейтинг: 0 / 0
Как правильно в коде службы обработать её принудительное завершение?
    #38458141
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BRS_11) Можно из работающей службы (в моем случае №1) отлавливать, что её останавливают?

2) Есть ли какой-нибудь механизм взаимодействия между службами? Что бы служба №2 не останавливала службу №1, а послала ей команду "остановись" и служба №1 корректно завершила свои методы (с 1 по 3) и сама вызвала this.Stop()

1) Событие Service.OnStop()
2) Вариантов взаимодействия со службой навалом. На мой взгляд самый удобный - поднять WCF-сервис с командами управления службой
...
Рейтинг: 0 / 0
Как правильно в коде службы обработать её принудительное завершение?
    #38458309
BRS_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79BRS_11) Можно из работающей службы (в моем случае №1) отлавливать, что её останавливают?

2) Есть ли какой-нибудь механизм взаимодействия между службами? Что бы служба №2 не останавливала службу №1, а послала ей команду "остановись" и служба №1 корректно завершила свои методы (с 1 по 3) и сама вызвала this.Stop()

1) Событие Service.OnStop()
2) Вариантов взаимодействия со службой навалом. На мой взгляд самый удобный - поднять WCF-сервис с командами управления службой

Что произойдет ранее? Сначала оборвется выполняющийся по таймеру метод2 и потом управление перейдет в OnStop()
или
сначала управление перейдет в OnStop по завершению которого служба остановится и оборвет выполняющийся метод2 ???
...
Рейтинг: 0 / 0
Как правильно в коде службы обработать её принудительное завершение?
    #38458360
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BRS_1, по идее сначала управдение получит OnStop и после его завершения слуба остановится и оборвется выполнение метода запущенного таймером. То есть тебе нужно из метода OnStop дать сигнал завершиться своим методам. Имей в виду что система дает каждой службе определенное время на красивое завершение (около 30 секунд вроде). После этого сервис будет прибит.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно в коде службы обработать её принудительное завершение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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