0

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

4

1 回答 1

1

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

附加信息 为了减少您的编码开销,您正在寻找一个拦截点来处理这个计时器。如果您将 WCF 用于您的服务调用,最简单的方法是使用作为服务扩展添加的自定义 IParameterInspector。您可以将计时器逻辑添加到 AfterCall() 方法中,以便每个服务调用都通过同一代码块运行并重置计时器。有关实现自定义行为的详细信息,请参阅此 MSDN 文章

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

于 2012-10-17T13:01:52.973 回答