Дизайн для приложения планировщика VB.NET - PullRequest
1 голос
/ 27 января 2010

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

Мне нужен какой-то компонент типа «сервер», который находится в фоновом режиме мониторинга пользователей и выполняет различные задачи. (этот компонент может быть установлен локально или централизованно) Пользователи подают инструкцию «серверу» для выполнения определенной задачи в назначенную дату и время. (или выполнить задание сразу)

«Сервер» будет выполнять задачу в желаемую дату и время и сообщать пользователю результат задачи.

Я подумал об использовании центральной базы данных, в которую пользователь пишет инструкции. «Сервер» мог читать из базы данных, чтобы получить инструкции, и записать результат обратно в базу данных.

Мне нужна быстрая реакция на инструкции, поэтому «сервер» должен опрашивать базу данных каждые несколько секунд; Боюсь, это может отрицательно сказаться на производительности. Также, как мне заставить сервер выполнить задачу в нужное время?

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

Буду признателен за любые идеи, указатели или предложения.

Ответы [ 2 ]

3 голосов
/ 27 января 2010

Вы смотрели на quartz.net ? Это структура планирования, которая может быть полезна для вас.

1 голос
/ 27 января 2010

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

В нашем случае звонившими были другие приложения, а не люди.

Веб-сервис состоял из следующих методов: (грубая версия, не точная)

  • int AddJob (string jobType, string input, datetime startTime) // планирует задание и устанавливает таймер для вызова StartJobs при необходимости, а затем возвращает идентификатор задания
  • void GetResults (int jobId, состояние out-строки, выход out-строки) // получает результаты (status = "поставлен в очередь / запущен / завершен / не выполнен")
  • void StartJobs () // вызывается через таймер, необходимый для запуска запланированных заданий

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...