Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не закрывается виндовый сервис 
:(
    Опции темы
Competitor
Дата 2.7.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



Всем привет!!
Есть проблема виндовый сервисом. Дело в том, что он нормально закрывается только лишь в одном случае из десяти. А обычно виснет. Приходится вырубать через диспетчер процессов.
Код

        protected override void OnStop()
        {
            dispatcher.Stop();
        }

Причем метод dispatcher.Stop() вообще не вызывается!!!
Из-за чего это может быть? В сервисе используется многопоточность.
Подскажите плз в каком направлении копать?

Ошибка такая:
Код

Could not stop My core Service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.


Это сообщение отредактировал(а) Competitor - 2.7.2007, 11:16
PM MAIL WWW   Вверх
stab
Дата 2.7.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



значение свойства CanStop случаем не переопределял? в логах сообщения есть от сервиса?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Competitor
Дата 2.7.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



В логах ничего.
Свойство CanStop не переопределял.
Метод OnStop() вообще не вызывается!!

Добавлено через 2 минуты и 55 секунд
Вот что у мелкомягких по этому поводу
Проблема
Если процесс остановки или приостановки управляемой службы Windows занимает больше принятого по умолчанию времени, то появляется следующее сообщение об ошибке.
Не удалось остановить службу служба_Windows на локальном компьютере.
Ошибка 1053: Служба не ответила на запрос своевременно.
Примечание. служба_Windows — это имя созданной пользователем службы Windows.

Перейти к началу страницы
Причина
Класс ServiceBase вызывает метод OnStop непосредственно из обработчика команд Service, который определен в компоненте ScDispatcherLoop файла Advapi32.dll. Через 30 секунд, если поток ScDispatcherLoop не готов принять новую команду службы от диспетчера служб, контроллер служб Windows присваивает ей отметку об истечении времени ожидания и появляется описанное сообщение об ошибке.

Перейти к началу страницы
Решение
Чтобы решить эту проблему, получите последний пакет обновления для Microsoft .NET Framework 1.1. Дополнительные сведения см. в следующей статье базы знаний Майкрософт:
885055 (http://support.microsoft.com/kb/885055/) Как получить пакет обновления 1 (SP1) для .NET Framework 1.1

Интересно, а как решить проблему, если ничего дополнительно не скачивать
PM MAIL WWW   Вверх
tol05
Дата 2.7.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Когда ты пишешь сервис, то все методы, которые ты переопределяешь от ServiceBase (OnStart, OnStop) и точка входа в программу (Main) должны возвращать управление не позже чем через 30 сек своей работы. Поэтому, если где-то у тебя могут быть длительные операции, делай их асинхронно, в отдельном потоке. (Запускай поток, с делегатом на свой длительный метод, и отдавай управление системе)
У тебя видно OnStop() не успевает за 30 секунд выполниться. 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Competitor
Дата 2.7.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



я в onstop ставил log point. Этот метод даже не вызывается
PM MAIL WWW   Вверх
tol05
Дата 2.7.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(Competitor @  2.7.2007,  11:09 Найти цитируемый пост)
сервисе используется многопоточность

а потоки - фоновые (IsBackground == true)? Если нет - то основной поток будет в OnStop ждать, пока все они не соизволят завершиться...



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Competitor
Дата 2.7.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



ясно.
Для всех вручную создаваемых потоков сделал IsBackground = true.
Все равно сервис не хочет останавливаться. 
Единственное что осталось это асинхронное ожидание сообщение через MSMQ. Выглядит так:
Код

private MessageQueue eventQueue;
....
eventQueue.BeginReceive(new TimeSpan(0, 0, 0, 5, 0), null, new AsyncCallback(this.DispatchEvent));

Как в этом случае заставить все потоки завершиться?
PM MAIL WWW   Вверх
tol05
Дата 2.7.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



eventQueue.Close() ?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Competitor
Дата 3.7.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



tol05, где мне следует вызывать eventQueue.Close() ?
Ведь метод onStop вообще не отрабатывается. Вот юзер нажимает на stop в окне Services, я так понимаю единственный обработчик этого события - метод OnStop(). Я в самое начало этого метода ставил точку логирования. Он даже не начинает выполняться. Наверное, как ты и сказал, основной поток ждет пока завершатся все остальные и даже не передает управление в OnStop. патовая ситуация получается (
PM MAIL WWW   Вверх
tol05
Дата 3.7.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



у тебя так?
Код

class MyService :ServiceBase
    {
        private MessageQueue eventQueue;

        public MyService()
        {
           InitializeComponent();
        }

        private void InitializeComponent()
        {
            AutoLog = true;
            CanPauseAndContinue = true;
            CanStop = true;
            CanShutdown = true;
            ServiceName = "MyService";
        }

        protected override void OnStop()
        {
            eventQueue.Close();
        }
    }


пришли мне весь код в PM. Погляжу.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.