Скорее всего, самый простой способ «самостоятельно разместить» консольное приложение - это поместить его в службу Windows . Он может быть автоматически перезапущен при сбое службы. Вы должны проверить это обсуждение SO для получения дополнительных сведений об этом.
Есть еще одна вещь, которую следует учитывать. Насколько я понимаю, рабочий процесс ваших приложений можно описать так:
1) Считывает необработанные данные
2 / A) Обрабатывать считанные данные
2 / B) Пометить данные как обработанные
I ' Мы использовали A и B, чтобы указать, что они выполняются одновременно . Но с этим есть проблема: то, что происходит, либо 2 / A, либо 2 / B терпят неудачу.
- Если 2 / A завершается неудачно, но 2 / B завершается успешно, то задание не выполнено, но сообщается как успешное (повторная попытка не инициируется)
- Если 2 / B терпит неудачу, но 2 / A выполнено успешно, тогда задание выполнено, но об успешном выполнении не сообщается (поэтому будет выполнено повторное выполнение)
Немного лучше будет использовать semanti c блокировку введя состояния ProcessStarted
и ProcessFinished
. Имея это в виду, рабочий процесс будет выглядеть следующим образом:
1) Прочитать необработанные данные и пометить их как ProcessStarted
2) Данные процесса
3) Отметить обработанные данные как ProcessFinished
При таком подходе вы можете легко определить, какие данные были начаты для обработки, но не завершились sh, путем запроса тех, у которых состояние ProcessStarted
и дата последнего изменения больше, чем предопределенный порог.
Следует отметить еще одну вещь: в случае пакетной обработки вы должны иметь возможность повторить попытку всего пакета, а не только отдельных данных.