1

我有一个一直在运行的 Windows 服务,并且每 15 分钟执行一次操作。我还有一个客户端 WinForms 应用程序,它显示有关服务正在做什么的一些信息。我希望表单应用程序能够根据最近的状态保持更新,但我不确定每秒轮询是否是一个好的举措。

  • 当它启动时,我的 Windows 服务会打开一个 WCF 命名管道来接收查询(来自我的客户端表单)
  • 每一秒,winform 上的计时器都会向管道发送一个查询,然后显示结果。如果管道不存在,则表单将显示服务未运行。

这是最好的方法吗?如果我的服务在启动时打开管道,它会一直保持打开状态(直到我关闭它或我的服务停止)?除了轮询服务之外,也许服务还有一些方法可以通知任何正在监视的应用程序某些事件,例如启动和停止处理?这样,我可以减少投票,因为我大概已经知道重大事件,并且只会投票以获取进展。

有什么我想念的吗?

4

1 回答 1

1

如果可能的话,我会避开投票。您最好采用基于事件的机制,这可以减少开销并在必要时提供即时状态更新。

你已经走在了前面。WCF 绝对是基于 .NET 的应用程序的最佳选择。而且由于您的表单和服务在同一个系统上,因此命名管道绑定也是可以使用的。现在您所需要的只是让您的服务发布事件,包括定期状态更新,您的表单可以在打开时收听这些事件。

我发现最简单的方法是使用Juval LowyPublish-Subscribe Framework。这个框架的巧妙之处在于它将发布者与订阅者分离。发布者发布事件,而不关心订阅者是否存在。如果存在订阅者,则转发事件以供其使用。根据您的描述,我认为这对您非常有用。

于 2010-06-07T15:59:54.290 回答