2009-12-09 4 views
5

Мы хотели бы иметь некоторые периодические действия, выполняемые нашей службой WCF, размещенной в IIS. Каков наилучший способ сделать это? Создание таймера не выглядит хорошим решением. Создание службы Windows, которая будет вести себя как своего рода сердечный ритм, выглядит как проблемное решение, но оно все равно плохо пахнет. Какой подход будет хорошим решением этой проблемы?Периодические задачи внутри службы WCF, размещенные в IIS

+0

Чтобы прояснить это немного. Это не задача обслуживания, а задача, которая должна выполняться один раз в час, чтобы проверить, есть ли у нее какие-либо подписки для завершения, некоторые электронные письма для отправки и такие вещи. –

ответ

2

Это зависит от того, что вы пытаетесь сделать. Если это действие очистки, связанное с базой данных, например. удаление сиротских тележек для покупок, вы можете запланировать работу для этого в своей базе данных по выбору, например, очень надежный механизм работы SQL Server. Служба Windows будет отличным кандидатом, если это действие на основе ОС, такое как периодическая очистка/удаление файлов и т. Д. Поскольку служба IIS/WCF обычно больше предназначена для обработки внешних ответов, я не думаю, что было бы неправильно использовать уровни обслуживания ОС или БД для вашей задачи.

0

Раньше я выполнял такие задачи в мои PHP-дни, когда планировал отправить электронное письмо в определенное время. После многих месяцев возиться (в основном, пытаясь обработать вызовы на страницу, которая может никогда не появиться), я в конце концов пришел к выводу, что по существу безгосударственный бит кода не является местом для этого, и запланировал задание cron для каждого из них ночь.

Я бы порекомендовал пойти по маршруту запускаемой извне работы (либо в SQL, и в Windows Service, и т. Д.), И обработать ваши операции оттуда. Боль, как я знаю, к моей стоимости, просто не стоит возврата.

0

Я много боролся с этим, и в некоторых случаях, когда требуется очистка, просто выполнялась асинхронная (фоновая) задача на обратной стороне общей функции для очистки периода, то есть On GetCommonList(), Я делаю чек в настройках/appsetting для lastrun, а затем пинаю его один раз в день или каждые 5 минут и т. Д. Таким образом, если приложение переходит на более зеленые пастбища (что происходит), мне не нужно беспокоиться о каких-то затяжных задачах. Не работает во всех случаях, но безопасность и т. Д. Также автоматически заботятся - в то время как услуги и т. Д. У вас могут быть проблемы с этим. Просто мой 2c.

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