1

我需要构建一个在后台运行的应用程序,并在 Windows 启动后立即启动。我需要第二个应用程序,它必须是一个 Windows 窗体,它向主应用程序提供状态的呈现和一些控制。

首先,我开始将 Windows 服务作为主要应用程序,将 Windows 窗体作为辅助应用程序,但我发现了一个严重的问题。他们如何相互交流。所以 TCP 是我的第一个想法,但防火墙阻止了我。

我研究并找到了WCF。显然使用 WCF 我可以在两个应用程序之间进行通信而不会让人头疼,但我从未使用过 WCF 并且有两件事让我担心。

WCF 有防火墙问题?使用 Windows 服务 <=> WCF <=> Windows 窗体是一个好方法,我的意思是,这不是一个坏习惯吗?

请帮助我,我很迷茫。

4

2 回答 2

4

使用 WCF 在 Windows 服务和前端应用程序之间进行通信是一种非常好的方法。我过去曾成功地使用过这种方法。

WCF 基本上是围绕传输机制的一个抽象层。您定义需要交换的数据;WCF 负责如何交换数据。WCF 的真正好处在于它将您的数据交换转换为形式化的方法调用。从您的角度来看,从 Windows 服务向应用程序发送状态消息就像进行方法调用一样简单。在幕后,WCF 序列化消息,将其发送到远程端点,并在交换完成时将控制权返回给您。

WCF 在同一台机器上或跨机器上运行良好。如果您在同一台机器上,NetNamedPipeBinding可能是您想要使用的。对于跨机器通信,有多种选项可供选择,包括NetTcpBinding。我发现此流程图在选择绑定时很有帮助。

WCF 绑定选择流程图.

为了全面披露,我对 WCF 感到沮丧有以下三个原因:

  1. 与 WCF 相关的陡峭学习曲线。
  2. 缺乏与 Visual Studio IDE 的无缝集成。
  3. 表现。

学习曲线是一次性成本,但它可能是巨大的。大约 3 年前我最后一次使用 WCF 时,Visual Studio 并没有使它易于使用,这只会加剧我的学习曲线。Visual Studio 今天可能会让它变得非常容易;我只是不确定。不过,我真正的挫败感是性能。根据我的经验,第一次调用方法时 WCF 很慢,之后几乎是瞬间的。我的软件的用户不止一次评论了性能,所以我今天使用基于 TCP 的解决方案来缓解这个问题。

至于您的特定问题,如果您的服务和应用程序在同一系统上运行,则防火墙应该不是问题。只要确保您使用本地主机地址 (127.0.0.1)。如果它们位于不同的系统上,WCF 可以通过其中一种 http 绑定来帮助缓解防火墙问题。

我希望这有帮助。

于 2013-07-03T20:41:02.367 回答
1

我以前使用 WCF 在客户端和服务器之间进行通信。我看不出你为什么不能对两个本地应用程序执行此操作。不过,您应该查看这两个链接。他们可能会帮助你很多。

于 2013-07-03T20:13:01.237 回答