使用计时器的自托管WCF服务中的定期操作

使用计时器的自托管WCF服务中的定期操作,wcf,windows-services,timer,wcf-client,robustness,Wcf,Windows Services,Timer,Wcf Client,Robustness,我知道在托管在IIS中的WCF服务类中使用计时器不是一个好主意,因为这些服务类的生命周期很短。从建议中也可以看出,提供服务是应对这种情况的最佳方式 但有人在生产中尝试过在自托管服务中使用计时器吗?我们有一个windows服务,它充当客户端,并使用计时器来执行当前的定期操作 这在大多数情况下都很好,但我担心设计的健壮性:一些操作是关键的(金融系统计算触发器)。由于WCF服务和windows服务是两个组件,因此很难确保两者都在运行 如果我将关键操作移动到WCF服务内的计时器,我将消除该问题,但是我还

我知道在托管在IIS中的WCF服务类中使用计时器不是一个好主意,因为这些服务类的生命周期很短。从建议中也可以看出,提供服务是应对这种情况的最佳方式

但有人在生产中尝试过在自托管服务中使用计时器吗?我们有一个windows服务,它充当客户端,并使用计时器来执行当前的定期操作

这在大多数情况下都很好,但我担心设计的健壮性:一些操作是关键的(金融系统计算触发器)。由于WCF服务和windows服务是两个组件,因此很难确保两者都在运行


如果我将关键操作移动到WCF服务内的计时器,我将消除该问题,但是我还应该关心什么呢?

如果我理解正确,您的问题实际上是关于IIS托管的WCF服务的,对吗

IIS控制运行WCF服务的应用程序池。这意味着IIS可能会决定回收您的应用程序池以及其中的所有应用程序/服务。然后,您的服务只有在被客户端调用后才会再次被激活。因此,不能依赖WCF服务或ASP.NET应用程序中的调度


当然,如果您可以自行托管WCF服务,情况会发生变化。然后就没有需要考虑的IIS应用程序池,您可以随意安排。因此,如果您需要WCF+调度的组合,最好创建一个同时包含两者的Windows服务。

您让我意识到了一件事:如果我在Windows服务中使用
ServiceHost
,并添加计时器,我就能解决问题,但它提出了另一个问题:如何调用
服务主机上的操作?我是否直接实例化服务类,或者更复杂地说,在实际运行ServiceHost的windows服务中有服务引用?您的主机/windows服务是一个项目,您的实际WCF服务是另一个项目,它们都在同一个解决方案中。