Завершение длительного процесса в службе Windows - PullRequest
1 голос
/ 15 июля 2009

У меня есть служба Windows, которая выполняет длительный процесс. Он запускается таймером, и весь процесс может занять несколько минут. Когда таймер истекает, служба создает объект управления, который выполняет различные задачи, регистрирует результаты и затем завершает работу.

Я не реализовал ничего, чтобы справиться с теми случаями, когда сервер выключался во время процесса. Это может вызвать некоторые проблемы. Как лучше всего справляться с этим?

Ответы [ 2 ]

0 голосов
/ 07 августа 2009

Если вы описываете, по сути, пакетный процесс, вполне нормально иметь таймер, который работает с интервалом - большая часть мира работает таким образом.

Если он длится долго, постарайтесь сделать так, чтобы ваши единицы работы или партии были настолько малы, чтобы ваш процесс мог хотя бы проверить, было ли сигнализировано о его остановке или нет. Это позволит службе корректно завершить работу, а не игнорировать сообщение об остановке службы.

Где-то в вашей функции таймера у вас есть свойство IsShutdownRequired или что-то подобное, что вы проверяете (при условии некоторой обработки цикла). Это свойство имеет значение true в сообщении управления остановкой службы, которое позволяет вашему процессу корректно завершиться, либо не пытаясь выполнить больше работы, либо, как предложил Джимми, откатывая эту работу, если она находится в транзакции.

В идеале, меньшие партии были бы лучше, чем одна большая.

0 голосов
/ 15 июля 2009

Могу дать только смутные предложения, поскольку я не знаю, какую задачу вы на самом деле делаете.

Если это что-то сделать с базой данных, существует транзакция, которую можно откатить, если она не зафиксирована.

Если это связано с некоторыми манипуляциями с файлами, возможно, посмотрите эту статью о транзакционной NTFS. Вы можете использовать его в комбинации с объектом TransactionScope для обеспечения атомарной транзакции.

Если вы имеете дело с веб-сервисами, то границы сервиса будут определять, когда одна транзакция начинается / заканчивается, а когда начинается другая, используйте модель вознаграждения (если вы что-то сломаете с вашей стороны, вам потребуется предоставить способ позже после восстановления - способ уведомить / выполнить сценарии компенсации на другом конце (подумайте о заказе книги онлайн и о том, как обрабатывать задержки, отмены и т. д.)

Для механизма отслеживания регистрируйте все шаги и временные рамки для устранения неполадок, если происходит что-то вроде выключения.

...