【问题标题】:Windows Service OptionsWindows 服务选项
【发布时间】:2016-01-16 17:49:26
【问题描述】:

在我以前工作的地方,我们纯粹是 Azure,而在以前的其他工作中,我主要从事 Web 应用程序。在 Azure 中,我会创建一个 Worker 来充当服务总线队列侦听器……但在这个位置上,我需要创建一个 Windows 服务(充当 MSMQ 侦听器),而且已经有一段时间了这样做了,还有几个小问题。

  • 问题:普通的 Windows 服务会做还是有更好的 WCF Windows 服务选项或等效选项?
  • 问题:我需要确保可以在同一个盒子上实例化同一服务的多个副本...我该怎么做?我需要设置任何属性来执行此操作吗?
  • 问题:如果我想确保只能实例化一个副本,我该怎么做?

更新:
我基本上需要在同一个盒子上运行相同可执行文件的许多实例。所以,我想弄清楚如何做到这一点。

欢迎任何支持文章。我用谷歌搜索了很多,但没有找到太多最近的东西。大多数看起来已经过时了。因此,问题。

感谢您的帮助。

【问题讨论】:

  • 比较 Bri 和 Scott 的答案:哪种方法明智取决于系统管理员是否要独立停止和启动各种侦听器。如果它们都将同时启动和停止,或者如果它们将由您自己的软件自动启动和停止,那么单个服务更明智。如果系统管理员想要说,“停止侦听器 E”和“启动侦听器 B”使用 Windows 服务工具,那么您需要多个服务。

标签: c# wcf windows-services


【解决方案1】:

服务不代表单身

您可以根据需要注册任意数量的 Windows 服务副本——因此请小心假设仅因为它是一项服务就只能运行一次!

如果您担心同一机器上的多个用户“运行”您的 exe 的多个副本,那么作为服务运行可以解决您的问题。

如果您担心服务的多个副本可能会被“安装”,那么您需要实现互斥锁。

想想 sqlServer exe“服务”。 Msft 为盒子上的每个 sql“服务”创建一个具有相同 exe 的新服务。

如何将一个 EXE 安装为服务不止一次。

服务的唯一性取决于服务名称,而不是 EXE 名称或路径。我不会详细介绍如何create a library for install/start/stop services,因为其他人已经这样做了。

但是,我可以告诉你,我们使用相同的一组方法来创建具有相同 exe 的多个 Windows 服务。服务“名称”是 BTMonitor,我们只需将服务命名为“BTMonitor$Queue1”、“BTMonitor$Queue2”、“BTMonitor$Queue3”等即可运行多个副本。注意 $ 是我们自己的约定,不是什么神秘的要求.

然后,我们只需将命令行参数附加到为每个“$Queue”配置它的 EXE。

对于您的其余问题,我将遵从 Scott 的出色回答。

【讨论】:

  • Scott 的回答暗示你只能运行 1...我可以在同一个盒子上“注册”同一个 EXECUTABLE 的多个实例吗?是这样的,你有关于这方面的好文章吗? ...谢谢。
  • 我基本上需要在一个盒子上运行同一个监听器的多个实例。
  • 我们使用内部库来执行此操作see this article 了解详细信息。为答案添加一些细节。
  • 您的安装/启动/停止有几个答案...您选择了哪一个?
【解决方案2】:

普通的 Windows 服务会做还是有更好的 WCF Windows 服务选项或等效选项?

这取决于您在做什么,但是没有“WCF Windows 服务”之类的东西,您可以在 Windows 服务中拥有一个 can be hosted 的 WCF 端点(称为“自托管”),或者您可以拥有托管在 IIS 网站中的 WCF 端点,使用 WAS 按需激活它。

但是,将 WCF 配置为使用 MSMQ 是 not as easy as just using HTTP(您必须为您的 IIS 站点配置 MSMQ 的 WAS 侦听器),建议将这些类型的端点放在 Windows 服务中。

我需要确保可以在同一个盒子上实例化同一服务的多个副本...我该怎么做?我需要设置任何属性来执行此操作吗?

Windows 服务不能运行多个副本,您必须编写单独的 Windows 服务,拥有一个在单个可执行文件中启动多个 WCF 端点的“控制”服务,或者使用 IIS 在不同的端点地址托管多个服务。

如果我想确保只能实例化一个副本,我该怎么做?

通过将其编写为 Windows 服务。

【讨论】:

  • Scott,你知道一篇关于“在单个可执行文件中启动多个 WCF 端点的服务”的好文章...谢谢
  • 我基本上需要在一个盒子上运行同一个监听器的多个实例。
猜你喜欢
  • 2011-12-04
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多