【问题标题】:Windows Service vs Hosted WCF ServiceWindows 服务与托管 WCF 服务
【发布时间】:2013-08-06 05:35:38
【问题描述】:

我们有一个客户端服务器应用程序。 我的应用程序需要更改为通过 WCF 服务工作才能接收/发送数据到数据库(安全要求)。

我还需要另一个托管在客户端的服务,并将客户端连接到服务器端的 WCF 服务,通过 Https 连接。 服务器上的 WCF 服务处于 PerSession 模式。 我与服务器的大部分工作是插入/选择查询。

所以我的设计是:

客户端 ->windows 服务 ->WCF 服务器服务(iis7) ->数据库。

此 Windows 服务同时充当客户端和服务器。 充当服务器:用于客户端应用程序。 充当位于服务器上的 WCF 服务的客户端。

应用程序需要支持 XP 和 .net 4 的正版操作系统。

Windows 服务只需要按需连接 WCF 服务(当客户端应用程序启动时)。

我需要决定以何种方式实现客户端 Windows 服务。 我更喜欢使用带有 TCP/IP 的 WCF 托管服务来实现它,但这样做感觉有点过头了。 我应该使用其他 IPC 实现吗?如果有,是哪一个?

那么,实现这个 Windows 服务的最佳方式是什么?

谢谢

【问题讨论】:

    标签: wcf c#-4.0 windows-services


    【解决方案1】:

    我不完全理解为什么要在客户端使用 Windows 服务以便与 WCF 服务进行通信。但问题不在于架构模式......

    因此,对于进程间通信,我将使用NetNamedPipeBinding。 您可以找到有关如何决定使用哪个绑定的更多信息here

    使用 WCF 服务进行进程间通信对我来说一点也不觉得矫枉过正。实际上 WCF 服务非常轻量级,除了主机初始化过程,我猜在 Windows 服务的情况下不应该经常发生。 WCF 提供了可靠性和可扩展性以换取这种微小的不便。

    [已编辑]

    我刚刚重读了您的帖子,我想澄清一些有关托管的细节。您可以在 Windows 服务中托管 WCF 服务,这在 here 中进行了解释,但反之则不行。对不起,如果我误解了你的问题。是的,用于进程间通信的 TCP/IP 绝对是大材小用,但是根据this 文章,NetNamedPipeBinding 使用共享内存,所以它应该是最快的方式。

    【讨论】:

      最近更新 更多