Динамически выполнять метод только один раз в день, используя веб-сервис - PullRequest
1 голос
/ 26 марта 2011

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

Это время будет храниться в базе данных.

Это должно толькобегать раз в день.

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 26 марта 2011

создать службу Windows , запустить ее при запуске Windows, настроить таймер , создать событие для обработки прошедшего события таймера , и ты в порядке.

1 голос
/ 26 марта 2011

Веб-сервисы не подходят для этой задачи.Они предназначены для запуска в ответ на запрос.Вам нужен код для запуска в ответ на время суток.

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

0 голосов
/ 26 марта 2011

Обязательно ли, чтобы время сохранялось в базе данных? Как правило, они используют для этого внешнюю службу планировщика (Task Scheduler или SQL Agent). И вызвать службу, запустив HTTP-клиента командной строки с URL-адресом службы. Например, Curl сработает, или вы можете собрать быстрый JavaScript с помощью вызова XMLHTTP и вызвать его с помощью cscript.exe.

Кроме того, если обработка данных может быть полностью реализована как хранимая процедура, нет необходимости в веб-службах и сценариях оболочки. Вызовите процедуру напрямую из агента SQL (при условии, что MS SQL Server).

РЕДАКТИРОВАТЬ: тогда вы значительно усложнили дизайн. Скажите, какой точный срок вы хотите? Вы хотите, чтобы время было точным до одной минуты, часа, одного дня? Если желаемая точность соответствует нескольким минутам, вот что вы можете сделать. Есть процедура в базе данных. Выполните его (с помощью агента SQL) на границе точности, скажем, каждые 5 минут. Пусть он проверит, пришло ли время запустить сервис. Если так, сделайте так, чтобы это вызвало сервис. XMLHTTP и OLE-автоматизация - это, вероятно, путь; ищите системные процедуры sp_OACreate, sp_OAMethod. Как то так:

declare @o int
exec sp_OACreate 'Msxml2.XMLHTTP', @o output
exec sp_OAMethod @o, 'open', @bstrMethod='GET', @bstrUrl='http://what-have-you/'
exec sp_OAMethod @o, 'send'

Процедуры sp_OAxxx по праву считаются очень небезопасными и требуют значительного уровня привилегий для запуска.

...