在Windows服务中检测空闲

时间:2012-10-17 12:58:50

标签: c# windows-services

我有一个Windows服务,它将在调用时启动(远程)。我不想保持服务运行所以我希望服务在进入空闲时间时自动停止,意味着在最后一次呼叫后几分钟。 我不想从我的远程客户端停止服务,因为我不知道我是否完成了工作,这就是为什么我想在服务端使用一些空闲事件。 有一些方法吗? 感谢,

1 个答案:

答案 0 :(得分:1)

在Windows服务中添加一个计时器,在每次调用时重置。当计时器过去(稍后几分钟)让它调用服务的Stop方法时,一旦它变为空闲,就会有效地停止服务器。

其他信息 为了减少编码开销,你需要一个拦截点来处理这个计时器。如果您使用WCF进行服务调用,最简单的方法是将自定义IParameterInspector添加为服务扩展。您可以将定时器逻辑添加到AfterCall()方法中,以便每个服务调用都通过相同的代码块运行。重置计时器。有关实施自定义行为的详细信息,请参阅this MSDN article

如果你没有使用WCF,那就有点棘手了。您可以使用Castle Windsor或PostSharp等AOP框架,或者以消息传递方式设计服务。 AOP允许您使用将调用重置代码的属性来装饰您的方法。消息传递涉及设计服务的合同,以便在服务中有一个通用的入口点来检查收到的消息&根据它的内容将其路由到正确的方法。可以想象,一个入口点=一个添加定时器重置代码的地方。但这些都不像基于WCF的解决方案IMO那样干净或易于实现。