Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как убедить SC что мой сервис может завершаться долго?  (Прочитано 3079 раз)
0 Пользователей и 1 Гость смотрят эту тему.
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


« : 11-11-2010 11:20 » 

Решил переписать .NET приложение как сервис (class myTestService : ServiceBase). Столкнулся с небольшой проблемой: после события onStop сервис может завершаться довольно долго (10 и даже 30 минут!), а SC после некоторго таймаута обижается и сообщает что "Error 1053: The service did not respond to the start or control request in a timely fashion." Жаль
Долгое завершение рабочего процесса - это его особенность, связанная с непрерывностью и всякими долгими операциями..
Пробовал в обработчике OnStop реализовывать ожидание и вызов RequestAdditionalTime(2000) в цикле, но это не помогает..
Конечно, сервис не убивается, а корректно останавливается в положенное время, но хотелось бы подавить это сообщение менеджера..
Как это сделать?
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 11-11-2010 12:27 » 

А если делать не как сервис?
В смысле, сделать программу как отдельный фоновый процесс и сделать сервис, но задачей последнего будет только либо запустить процесс (если его еще нет, иначе - сообщить ему, что останавливаться не надо), либо сообщить процессу о необходимости двигаться в сторону завершения. Тогда винда будет довольна.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


« Ответ #2 : 11-11-2010 12:33 » 

RXL, нет, тогда теряется смысл делать как сервис и вообще неудобно.. Сервис вроде как остановлен, а процесс работает..
Сейчас оно реализовано как обычное Windows-приложение и через Task Sheduler запускается..
Хочется красиво и удобно Улыбаюсь
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 11-11-2010 13:01 » 

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

Но по-моему в обычных условиях это редкое действие, поскольку штатно служба работает в фоне от загрузки системы до выгрузки. Т.е. изредка зашедший остановить службу разрабочик/сисадмин может и потерпеть. Если же это частое действие, выполняемое пользователем, то логично было бы написать для службы клиентское приложение с кнопочками Start и Stop - хотя бы чтобы не гонять пользователя в системную консоль или не заставлять его пользоваться командной строкой. Или же это вовсе не служба получается.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 11-11-2010 13:38 » 

с кнопочками Start и Stop

А ещё лучше (user friendly) кликабельная иконка в tray, можно с меню. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Kivals
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 11-11-2010 13:57 » 

baldr, Извини за глупый вопрос - но RequestAdditionalTime() и остановка основной программы надеюсь реализована асинхронно? Нет ли "затыка" более 2х секунд после вызова RequestAdditionalTime()?
Записан
baldr
Команда клуба

ru
Offline Offline
Пол: Мужской
Дорогие россияне


« Ответ #6 : 11-11-2010 15:06 » 

Kivals, конечно асинхронно Улыбаюсь
Джон, насчет иконки в трее - хорошая мысль, сам об этом думал, но это уже следующий этап.. Улыбаюсь
Dimka, все так.. Можно сделать альтернативный интерфейс и сделаю позже..
Но хочется именно "правильной" работы от SC Улыбаюсь Чтоп "все по закону"
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines