Можно ли запланировать WCF автоматически?
У меня ниже требования:
(1) Выполните "действие А", когда пользователь запрашивает его.
(2) Мы также хотим выполнять одно и то же действие "А" дважды в день, даже если пользователи не запрашивают его.
у меня есть WCF
веб-сервис с методом XYZ, выполняющим действие A
, Метод XYZ будет вызван, когда пользователь запросит его.
Теперь вопрос в том, могу ли я запланировать это действие, не создавая оконную службу (которая может разместить эту службу) или создавая proxy
?
Есть ли способ выполнить действие по запросу пользователя и запланировать это же действие, используя только одно приложение?
2 ответа
Нет, WCF нельзя запланировать автоматически. Вам нужно реализовать запланированную задачу (см. Планирование заданий в Windows), службу Windows с таймером (что вы сказали, что не хотите делать, если я правильно понял) или какое-то другое приложение с таймером.
Вы можете запустить поток согласно другому ответу, но это зависит от того, как ваша служба сама вызывает - я бы предпочел вызывать его извне, из другого процесса.
Запланированное задание может запускать исполняемый файл. Вы можете написать консольное приложение, которое вызывает вашу службу WCF, регистрирует любой результат (если необходимо) и затем завершает работу.
Обычно я предпочитаю реализовывать этот тип таймера с помощью службы Windows, просто потому, что за службой Windows можно наблюдать, регистрировать ее, а также можно автоматически запускать / автоматически перезапускать - установить ее, и она "просто работает". Если бы я не хотел использовать Службу Windows, я бы запланировал задачу.
Обычно я делаю это, просто вызывая метод службы WCF из какого-либо планировщика задач. В действительно простой форме вы можете просто создать поток из вашего сервиса, который периодически запускает метод WCF. Опять же, это не лучшее решение, но его проще всего продемонстрировать. Вы можете использовать другую библиотеку планировщика, чтобы сделать это тоже...
[ServiceContract]
public class SomeClass
{
[ServiceOperation]
public void SomeServiceMethod() { ... }
Затем где-то в запуске приложения:
Thread t = new Thread(new ThreadStart(CallService));
t.Start();
...
// this will call the WCF service method once every hour
public void CallService()
{
Thread.Sleep(3600000); // sleep 1 hour
new SomeClass().SomeServiceMethod();
}
Это один из способов сделать это, хотя и не лучшим образом, но в основном вы можете просто вызвать метод службы WCF, как и любой другой метод в приложении.