Windows 服务与托管 WCF 服务

Posted

技术标签:

【中文标题】Windows 服务与托管 WCF 服务【英文标题】:Windows Service vs Hosted WCF Service 【发布时间】: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 服务的最佳方式是什么?

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

[已编辑]

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

【讨论】:

以上是关于Windows 服务与托管 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何对 Windows 服务中托管的 wcf 服务进行负载/压力测试?

如何在虚拟机中使用托管在 Windows 服务中的 WCF

选择使用 IIS 进行 WCF 服务托管或使用 Windows 服务进行自托管

为啥托管在 Windows 服务内的 WCF 服务会在一段时间后死掉

使用移动设备访问托管在 Windows 服务中的 WCF 服务

通过 Windows 服务托管 WCF 服务库获得 System.InvalidOperationException:尝试启动 WCF 服务