WCF可以自动计划吗?
我有以下要求:
(1)当用户请求时执行“操作A”。
(2)即使用户不请求,我们也希望在一天内执行两次相同的“操作A”。
WCF可以自动计划吗?
我有具有方法XYZ执行动作A
一个WCF
web服务。方法XYZ将在用户请求时调用。
现在问题是,我可以安排此操作而无需创建窗口服务(可以托管此服务)或创建proxy
?
有没有一种方法可以通过用户请求执行某个操作,并只使用一个应用程序来安排相同的操作?
不,WCF不能自动调度。您需要实现计划任务(请参阅Scheduling jobs on windows),带有计时器的Windows服务(如果我理解正确,您说您不想这样做)或使用计时器的其他应用程序。
您可以根据其他答案启动线程,但这依赖于您的服务调用自己 - 我宁愿从另一个进程调用它的外部。
计划任务可以运行可执行文件。您可以编写一个调用您的WCF服务的控制台应用程序,记录任何结果(如有必要),然后完成。
我通常更喜欢通过Windows服务实现这种类型的计时器,只是因为Windows服务可以被监控,可以登录,并且可以自动启动/自动重新启动 - 安装它并且它“正常工作”。如果我不想使用Windows服务,那么我会安排一项任务。
这是在WCF中使用计时器的好方法吗?如果我们必须在IIS上部署它。 –
我通常通过从某种任务调度程序调用WCF服务方法来完成此操作。在一个非常简单的表单中,你可以从你的服务中产生一个Thread,定期运行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服务方法。
您是否尝试过在线调度服务? – Kizz