Является ли ваша служба реальной услугой или просто приложением WCF, которое контролирует папку XML?
В случае, если ваша служба WCF является обычным приложением, самым простым способом является использование функции «Запланированные задания» в Windows (найдено на панели управления). Просто попросите приложение проверить папку при запуске и установить запланированную задачу, которая запускает приложение в любое время.
Если целевое приложение является реальной службой Windows, вам необходимо использовать внутренний таймер. Посмотрите на класс System.Timers.Timer.
public void OnLoad() {
Timer timer = new Timer();
// Add event handler
timer.Elapsed += WorkMethod;
// Give us more control over the timer.
timer.AutoReset = false;
SetupTimer(timer);
}
// Setups the timer for the next interval and starts it.
private void SetupTimer(Timer timer) {
timer.Interval = GetNextChecktime().Subtract(DateTime.Now).TotalMillisecond;
timer.Start();
}
private void WorkMethod(object sender, EventArgs e) {
// Do work here
// Setup the timer for the next cycle.
SetupTimer((Timer)sender);
}
private DateTime GetNextChecktime() {
// Return the next time the service should run as a datetime.
}
Причина использования SetupTimer вместо использования AutoReset = истина, которая будет повторяться автоматически, чтобы синхронизировать таймер с GetNextChecktime(). Просто используя 24 * 60 * 60 * 1000 миллисекунд, поскольку прошедший таймер даст 24-часовую фазу, но вам нужно будет запустить скрипт в 01:00, чтобы он работал ежедневно в 01:00.
Если вы все еще можете повлиять на способ запуска приложения, я бы рекомендовал первый метод. Если у вас больше функций в службе или не требуется поддерживать какое-либо постоянное состояние, проще просто иметь приложение, которое отслеживает папку при запуске, а затем завершает работу. Это также легче отлаживать и меньше подвергать ошибкам, поскольку планирование выполняется Windows.
что, если моя служба ФОС это веб-сервис –