c# - 使用 WCF 的 Windows 服务

标签 c# .net wcf windows-services

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

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

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

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

请帮助我,我迷路了。

最佳答案

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

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

WCF 在同一台机器上或跨机器运行良好。如果你在同一台机器上,NetNamedPipeBinding可能是您想使用的。对于跨机器通信,有多种选项可供选择,包括 NetTcpBinding .我找到了这个 flow chart在选择绑定(bind)时很有帮助。

WCF Binding Selection Flow Chart .

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

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

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

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

希望对您有所帮助。

关于c# - 使用 WCF 的 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17457079/

相关文章:

c# - WCF - 客户端和 > 服务绑定(bind)可能不匹配

c# - 使用/不使用 JCL 在 Delphi 中托管 CLR - 示例

c# - Protobuf 字符串到可读字符串?

基于AD组的WCF Web服务认证

c# - 尝试连接到远程 WCF 服务时出现 TCP 错误 (10060)

c# - 令人惊讶的 int.ToString 输出

c# - 在异步或同步操作中使用监视器锁

.net - 计算 .WAV 文件中的 "time to start"

c# - 在 switch 语句中使用标识字段

c# - 设置 Telerik RadGrid 的行颜色