«код, который может периодически делать какие-то действия», называется «Таймер». Поиск в MSDN, вы найдете для этого три или четыре класса, некоторые из которых не являются gui (System.Threading.Timer
).
EDIT: Кому нужны изменения, чтобы их можно было увидеть? Если они видны только для других пользователей веб-службы, то один подход для каждого входящего запроса может проверить, не было ли периодическое действие просрочено и выполнить его. Однако вы не должны так поступать, если (1) изменения должны быть видны, например, другие клиенты одной и той же базы данных или (2) периодические изменения требуют больших разрешений, чем произвольные входящие запросы. Кроме того, периодические действия могут быть прерваны, если клиент отменяет их запрос, и выполнение действий может значительно задержать ответ клиенту. По этим причинам я не рекомендую добавлять периодическую обработку к обычной обработке запросов/ответов.
Перемещение кода на другую услугу не обязательно является хорошим планом. Попробуйте использовать их вместе: пусть служба Windows работает в фоновом режиме с помощью таймера, который делает запрос против веб-службы. Затем весь код, работающий с данными веб-службы, все еще содержится в веб-приложении. –
@Ben Voigt: Я бы согласился с тем, чтобы ваша логика была точно там, где она должна быть: в веб-сервисе и, следовательно, вызываемым другими системами.Поэтому я предполагаю, что соглашение заключается в том, что что-то * за пределами * веб-службы должно отвечать за поддержание, когда пришло время запуска и выполнения выполнения. – NotMe
Да, услуга Windows была бы лучше. Это гипотетично, но что-то в некоторых программах вызвало мыслительный процесс во мне. Когда я сказал веб-службы, то, что я действительно имею в виду, это уровень бизнес-логики, а не какой-либо код для пользовательского интерфейса. – dotnetdev