是否可以从WCF服务触发定期事件?

时间:2013-07-26 21:15:39

标签: c# wcf iis windows-services

我正在创建一个客户端可以与之交谈的WCF服务(在IIS中运行)。我希望我的服务器定期向主服务器发送心跳。

目前,我认为这样做的唯一方法是创建第二个发送心跳的Windows服务。

有没有办法让我的原始WCF服务定期运行一个事件,以便我可以只用一个服务完成所有事情?

2 个答案:

答案 0 :(得分:1)

在WCF服务中不是一个好方法

如果要使用某项服务,您可以存储NextHeartBeat时间戳,并检查是否有时间向主服务器发送消息。

答案 1 :(得分:1)

使用server pushfull-duplex方法可以实现您想要做的事情。但是对于心跳,您可以使用 WebClient 进行简单的http ping,如here所述。在自托管(非IIS)时,您可以覆盖 ServiceBase.OnStart / OnStop 并启动/停止计时器以定期触发ping。

但是,在IIS中托管WCF服务通常意味着您的服务是基于每个请求实例化的,因此没有任何服务实例可以发送持久ping。

这取决于您需要心跳到主服务器的目的。您是否可以让主服务器定期在WCF服务上执行请求?

如果您真的需要长时间运行的服务,那么在Windows服务而不是IIS中托管WCF可能是一种选择。