![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Competitor |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
Всем привет!!
Есть проблема виндовый сервисом. Дело в том, что он нормально закрывается только лишь в одном случае из десяти. А обычно виснет. Приходится вырубать через диспетчер процессов.
Причем метод dispatcher.Stop() вообще не вызывается!!! Из-за чего это может быть? В сервисе используется многопоточность. Подскажите плз в каком направлении копать? Ошибка такая:
Это сообщение отредактировал(а) Competitor - 2.7.2007, 11:16 |
||||
|
|||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
значение свойства CanStop случаем не переопределял? в логах сообщения есть от сервиса?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 Интересно, а как решить проблему, если ничего дополнительно не скачивать |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Когда ты пишешь сервис, то все методы, которые ты переопределяешь от ServiceBase (OnStart, OnStop) и точка входа в программу (Main) должны возвращать управление не позже чем через 30 сек своей работы. Поэтому, если где-то у тебя могут быть длительные операции, делай их асинхронно, в отдельном потоке. (Запускай поток, с делегатом на свой длительный метод, и отдавай управление системе)
У тебя видно OnStop() не успевает за 30 секунд выполниться. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
я в onstop ставил log point. Этот метод даже не вызывается
|
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
а потоки - фоновые (IsBackground == true)? Если нет - то основной поток будет в OnStop ждать, пока все они не соизволят завершиться... -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
ясно.
Для всех вручную создаваемых потоков сделал IsBackground = true. Все равно сервис не хочет останавливаться. Единственное что осталось это асинхронное ожидание сообщение через MSMQ. Выглядит так:
Как в этом случае заставить все потоки завершиться? |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
eventQueue.Close() ?
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
tol05, где мне следует вызывать eventQueue.Close() ?
Ведь метод onStop вообще не отрабатывается. Вот юзер нажимает на stop в окне Services, я так понимаю единственный обработчик этого события - метод OnStop(). Я в самое начало этого метода ставил точку логирования. Он даже не начинает выполняться. Наверное, как ты и сказал, основной поток ждет пока завершатся все остальные и даже не передает управление в OnStop. патовая ситуация получается ( |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
у тебя так?
пришли мне весь код в PM. Погляжу. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |