2010-05-16 1 views
3

У меня есть служба Windows, написанная на C#. Он запускает два потока, один объединяет веб-службу, второй ждет объект Monitor для нового задания. Кроме того, основной поток действует как хост службы WCF с использованием NetNamedPipeBinding. Он позволяет клиентскому приложению регистрировать обратный вызов и затем отправляет уведомления обратно.Моя программа на C#, работающая как служба Windows, блокирует Windows XP из спящего режима

Проблема заключается в том, что когда эта служба Windows работает, я не могу спящий или резервный компьютер, работающий в Windows XP, SP3. Когда я устанавливаю Windows в спящий режим или в ждущий режим, ничего не происходит. Затем, в тот момент, когда я иду в Service Manager и останавливаю службу, спящий режим системы начинается немедленно.

Класс обслуживания, расширяющий ServiceBase, обладает свойствами, такими как CanHandlePowerEvent, CanPauseAndContinue и т. Д., Установленными в true ... Это не имело никакого значения.

Вопрос в том, что может блокировать спящий режим/режим ожидания от продолжения? Что мне следует избегать?

ответ

5

Вы только упомяните, что вы установили для свойства CanHandlePowerEvent значение true. Я предполагаю, что вам также придется обрабатывать OnPowerEvent и возвращать true, если статус QuerySuspend, а также, вероятно, остановить все, что вы делаете, хотя я не знаю подробностей об этом.

Подробнее здесь:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onpowerevent%28v=VS.80%29.aspx

+0

Я была OnPowerEvent реализована возвращение всегда верно. Но этого было недостаточно. Однако то, что помогло закрыть соединение WCF, вызывает ServiceHost.Close() вручную. Очевидно, что канал WCF автоматически не прерывается на этом событии, но не знает деталей - я новичок в этом. Благодарю. – sherpa

Смежные вопросы