Windows 服务选项

Windows Service Options

在我以前工作的地方,我们纯粹是 Azure,而在以前的其他工作中,我主要从事 Web 应用程序。在 Azure 中,我会创建一个 Worker 作为服务总线队列监听器……但是在这个位置,我需要创建一个 Windows 服务(作为 MSMQ 监听器)并且它已经相当虽然我这样做了并且有一些小问题。

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

欢迎任何支持文章。我 'googled' 相当多,但没找到多少最近的。大多数看起来已经过时了。因此,问题。

感谢您的帮助。

Would a normal Windows Service do or is there a better WCF Windows Service option or equivalent?

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

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

I need to ensure multiple copies of the same service can be instantiated on the same box...how do I do this? Do I need to set any properties to do this?

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

If I wanted to ensure only one copy could be instantiated, how would I do that?

通过将其编写为 windows 服务。

服务不代表单身

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

如果您担心同一个盒子上有多个用户 "running" 您的 exe 的多个副本,那么 运行宁即服务可以解决您的问题。

如果您担心服务的多个副本可能 "installed" 那么您需要实施互斥体。

考虑 sqlServer exe "service." Msft 为盒子上的每个 sql "service" 创建一个具有相同 exe 的新服务。

如何将一个 EXE 作为服务安装多次。

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

但是,我可以告诉你,我们使用同一套方法用同一个 exe 创建多个 windows 服务。服务 "name" 是 BTMonitor,我们通过将服务命名为 "BTMonitor$Queue1"、"BTMonitor$Queue2"、"BTMonitor$Queue3" 等来 运行 几个副本。注意 $ 是我们自己的惯例,不是什么神秘的要求。

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

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