2010-07-12 2 views
2

В C#, что является лучшим способом создания механизма опроса? Поэтому у меня есть код, который может периодически выполнять некоторые действия.Разработка механизма опроса

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

Благодаря

ответ

2

Если вы говорите, что вы иметь веб-сервис, который, как предполагается, периодически предпринимает какие-то действия по своему усмотрению, тогда я думаю, что у вас еще нет модели веб-сервисов. Предполагается, что веб-службы будут сидеть там (точно так же, как на веб-странице), пока что-то не выйдет.

В противном случае вы имеете дело с очень хрупкой ситуацией, когда все может привести к простому остановке.

Если у вас есть немного кода, который необходимо запустить по таймеру, вам следует исследовать размещение этого кода в службе Windows (не путать с веб-службой). Для этого они и есть.

+1

Перемещение кода на другую услугу не обязательно является хорошим планом. Попробуйте использовать их вместе: пусть служба Windows работает в фоновом режиме с помощью таймера, который делает запрос против веб-службы. Затем весь код, работающий с данными веб-службы, все еще содержится в веб-приложении. –

+1

@Ben Voigt: Я бы согласился с тем, чтобы ваша логика была точно там, где она должна быть: в веб-сервисе и, следовательно, вызываемым другими системами.Поэтому я предполагаю, что соглашение заключается в том, что что-то * за пределами * веб-службы должно отвечать за поддержание, когда пришло время запуска и выполнения выполнения. – NotMe

+0

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

3

«код, который может периодически делать какие-то действия», называется «Таймер». Поиск в MSDN, вы найдете для этого три или четыре класса, некоторые из которых не являются gui (System.Threading.Timer).

EDIT: Кому нужны изменения, чтобы их можно было увидеть? Если они видны только для других пользователей веб-службы, то один подход для каждого входящего запроса может проверить, не было ли периодическое действие просрочено и выполнить его. Однако вы не должны так поступать, если (1) изменения должны быть видны, например, другие клиенты одной и той же базы данных или (2) периодические изменения требуют больших разрешений, чем произвольные входящие запросы. Кроме того, периодические действия могут быть прерваны, если клиент отменяет их запрос, и выполнение действий может значительно задержать ответ клиенту. По этим причинам я не рекомендую добавлять периодическую обработку к обычной обработке запросов/ответов.

0

Посмотрите на класс System.Threading.Timer. Это периодически вызывает метод, который вы предоставляете. Эти вызовы выполняются в отдельном потоке (поток в пуле потоков).

0

Вы хотите использовать таймер.

Есть несколько таймеров в рамках .NET, в том числе:

  • System.Timers.Timer
  • System.Threading.Timer
  • System.Windows.Forms.Timer

См. Эту статью, чтобы помочь выбрать правильный: Comparing the Timer Classes in the .NET Framework Class Library

+0

Да, это будет timers.timer, который мне нужен. – dotnetdev

0

Похоже, вы хотите таймер, но это не имеет смысла использовать в веб-службе. Было бы разумнее, если бы таймер находился в клиенте. Какие клиенты используют ваш веб-сервис?

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