У меня есть служба Windows C#. когда я пытаюсь остановить, он переходит в состояние остановки, и когда я помещал точку останова в методе onStop, тогда он не попадает. Не удалось отладить проблему. Я добавил обработку исключений по всей службе, а также необработанную обработку исключений, но я не получаю никаких ошибок. Все отлично с servie, у которого hasStop установлен на true, а также использует RequestAdditionalTime().C# Window Service OnStop не получает вызов
У меня также установлен legacyUnhandledExceptionPolicy enabled = "true" в app.config. Но никакой помощи. Для меня это выглядит как проблема с потоками/ресурсами, которые не позволяют диспетчеру управления службам вызвать метод OnStop. Или служба может находиться в уже поврежденном состоянии, и диспетчер управления сервисом не может ее остановить. Он просто меняет состояние с Stop на Stopping.
Когда я пытаюсь отлаживать, прикрепляя код к сервису exe, при попытке остановить службу ничего не происходит. Метод onstop не вызван.
В методе Onstart начинается поток, который продолжает делать своего рода опрос каждые 30 секунд. Предположим, что метод onStop вызывается, тогда он прервет этот поток. Так развивается эта услуга. Может кто-нибудь, пожалуйста, посоветуйте мне, как отладить эту проблему?
Есть ли свободные инструменты для отладки, если есть какая-то проблема с потоками, или мой поток в методе OnStart заставляет доступный ресурс диспетчеру управления сервисом? Пожалуйста, помогите мне, это срочно.
код в методе OnStop:
try
{
RequestAdditionalTime(10*60*1000);
IntPtr handle = this.ServiceHandle;
KServiceStatus.currentState = (int) State.SERVICE_START_PENDING;
SetServiceStatus(handle, ref KServiceStatus);
RequestAdditionalTime(30000);
if ((onStartThread == null) ||
((onStartThread.ThreadState &
(ThreadState.Unstarted | ThreadState.Stopped)) != 0))
{
onStartThread = new Thread(new ThreadStart(KWindowsServiceHandler.OnStart));
onStartThread.Start();
}
KServiceStatus.currentState = (int) State.SERVICE_RUNNING;
SetServiceStatus(handle, ref KServiceStatus);
}
OnStartThread продолжается до запуска службы работает. Это потребовало опроса. Если метод onStop - это вызов (который не вызывается), прервет этот OnStartThread.
Спасибо,
Камаль
Есть ли в потоке службы Thread.Join() где угодно? Ожидается любая другая предотвращаемая блокировка блокировки жесткого диска? Если это так, заставьте его уйти. –
..и убедитесь, что Thread.IsBackground настроен на true для всех не основных рабочих потоков, за исключением тех, где необходима эклиптическая очистка. –
в методе OnStart Я не могу назвать thread.join. onStartThread должен продолжать работать, он необходим для опроса каждые 30 секунд. Поэтому мой единственный вариант - прервать OnStartThread, когда служба останавливается. –