2010-09-27 2 views
2

Для рабочего проекта я выполняю задачу, которая заставит меня создать службу Windows C# .NET, которая будет работать 24/7. Программа будет по существу просто перемещать файлы (на основе заданного пути и регулярного выражения) между различными местоположениями - от/до HTTP, сетевых путей и FTP. Администратор будет планировать эти задания на странице администрирования в ASP.NET, где все задания будут храниться в базе данных. По-видимому, самая сложная задача заключается в планировании этих заданий - очень просто планировать задачи, которые будут выполняться в определенный день в определенное время, но также должны быть достаточно прочными, чтобы задачи могли выполняться каждый день, каждую неделю, каждый определенный день месяца или даже каждые несколько секунд/минут. Я пришел к выводу, что самым простым способом хранения этой информации о планировании будет использование синтаксиса cron (http://adminschoice.com/crontab-quick-reference) в базе данных.Приложение с запланированными задачами с базами данных на C# - нужно несколько советов re cron syntax

Приложение имеет таймер, чтобы проверять базу данных на предмет изменений каждые 10 минут, но основная проблема, которую я имею, заключается в том, чтобы восстановить выполняемые задачи. Я полагаю, что одним из вариантов было бы просто получить все каждые 10 минут и проверьте каждую отдельную строку, чтобы проверить, должны ли они выполняться. Но я считаю, что это очень неэффективный и технически ленивый способ - как вы, ребята, об этом позаботитесь?

Я знаю, что Windows Scheduled Tasks будет намного проще, но похоже, что мой босс этого не хочет.

Заранее благодарим любого, кто может предложить несколько советов/советов.

+3

Получите новый босс, который понимает, что для правильной работы используются правильные инструменты? – Oded

+0

Считаете ли вы использование Quartz.Net для программирования этого? Кажется, это правильный выбор (http://quartznet.sourceforge.net) –

ответ

0

Если количество задач, которые вы должны отслеживать, не является огромным, вы можете поддерживать очередь приоритетов всех задач в памяти. Узлы будут содержать ключ записи (из базы данных) и вычисленную следующую дату/время обновления.

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

Чтобы обрабатывать изменения, вы можете иметь веб-приложение, которое изменяет порядок уведомления об услугах. Вам придется отменить существующий таймер и перепланировать, но вам не нужно будет читать всю базу данных, кроме как при запуске.

Это, я согласен с @Oded: убедите своего босса использовать Windows Scheduled Tasks. Если ему не нравится этот интерфейс, вы можете подключить свое веб-приложение (или службу, с которой связано веб-приложение) с API-интерфейсом планировщика задач Windows. Codeplex имеет обертку: http://taskscheduler.codeplex.com/

0

Посмотрите на Quartz.NET - в значительной степени делает именно то, что вы хотите. Вы можете запланировать его также с помощью Cron expressions.

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

Хостинг это в службе Windows - это хороший способ сделать это - позволяет контролировать, что он работает, и предоставляет стандартные механизмы для его перезапуска, если он упадет (net start xxx) и т. Д. Гораздо лучше, чем запланированные задачи.

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

  • Нет связанных вопросов^_^