Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
08.11.2013, 16:03
|
|||
---|---|---|---|
|
|||
Как правильно в коде службы обработать её принудительное завершение? |
|||
#18+
Предыстория: была написана служба (служба №1), которая при запуске запускает таймер из метода OnStart. Таймер срабатывает с определенной периодичностью и в методе OnTimer служба выполняет различные манипуляции (метод1-получает почту, метод2-разбирает аттачи, метод3-заносит данные в БД). Все было хорошо, пока не потребовалось перезагружать службу №1 раз в сутки. Была написана служба (№2) которая в определенное время выполняла остановку и последующий запуск службы №1: //упрощенный код остановки службы Код: c# 1. 2.
Эксплуатация показала (так совпало по времени), что служба №2 останавливает службу №1 в середине метода2 (разбор аттачей). И хотя метод2 обернут в try-catch с выводом ошибок в лог-файл и эвенты - никаких сообщений об ошибках в логах нет. всё что есть в логах: сработка таймера метод1 - начал работу метод1 - закончил работу метод2 - начал работу служба завершает работу (это OnStop службы пишет в лог) Подскажите пожалуйста: 1) Можно из работающей службы (в моем случае №1) отлавливать, что её останавливают? 2) Есть ли какой-нибудь механизм взаимодействия между службами? Что бы служба №2 не останавливала службу №1, а послала ей команду "остановись" и служба №1 корректно завершила свои методы (с 1 по 3) и сама вызвала this.Stop() ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.11.2013, 16:13
|
|||
---|---|---|---|
Как правильно в коде службы обработать её принудительное завершение? |
|||
#18+
BRS_11) Можно из работающей службы (в моем случае №1) отлавливать, что её останавливают? 2) Есть ли какой-нибудь механизм взаимодействия между службами? Что бы служба №2 не останавливала службу №1, а послала ей команду "остановись" и служба №1 корректно завершила свои методы (с 1 по 3) и сама вызвала this.Stop() 1) Событие Service.OnStop() 2) Вариантов взаимодействия со службой навалом. На мой взгляд самый удобный - поднять WCF-сервис с командами управления службой ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.11.2013, 18:13
|
|||
---|---|---|---|
|
|||
Как правильно в коде службы обработать её принудительное завершение? |
|||
#18+
Arm79BRS_11) Можно из работающей службы (в моем случае №1) отлавливать, что её останавливают? 2) Есть ли какой-нибудь механизм взаимодействия между службами? Что бы служба №2 не останавливала службу №1, а послала ей команду "остановись" и служба №1 корректно завершила свои методы (с 1 по 3) и сама вызвала this.Stop() 1) Событие Service.OnStop() 2) Вариантов взаимодействия со службой навалом. На мой взгляд самый удобный - поднять WCF-сервис с командами управления службой Что произойдет ранее? Сначала оборвется выполняющийся по таймеру метод2 и потом управление перейдет в OnStop() или сначала управление перейдет в OnStop по завершению которого служба остановится и оборвет выполняющийся метод2 ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
08.11.2013, 19:02
|
|||
---|---|---|---|
Как правильно в коде службы обработать её принудительное завершение? |
|||
#18+
BRS_1, по идее сначала управдение получит OnStop и после его завершения слуба остановится и оборвется выполнение метода запущенного таймером. То есть тебе нужно из метода OnStop дать сигнал завершиться своим методам. Имей в виду что система дает каждой службе определенное время на красивое завершение (около 30 секунд вроде). После этого сервис будет прибит. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1403719]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
431ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 343ms |
total: | 864ms |
0 / 0 |