Windows服务选项

时间:2016-01-16 17:49:27

标签: c# wcf windows-services

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

  • 问题:正常的Windows服务是否有更好的WCF Windows服务选项或等效服务?
  • 问题:我需要确保同一个服务的多个副本可以在同一个框中实例化...我该怎么办?我是否需要设置任何属性才能执行此操作?
  • 问题:如果我想确保只能实例化一个副本,我该怎么做?

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

欢迎任何支持文章。我用谷歌搜索了#39;相当多,但没有找到最近的。大多数人似乎过时了。因此,问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

服务并不意味着单身

您可以根据需要注册多个Windows服务副本 - 所以请注意,假设这只是一项服务,它只能运行一次!

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

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

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

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

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

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

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

对于你提出的其他问题,我会按照斯科特的优秀答案。

答案 1 :(得分:1)

  

普通的Windows服务是否会有更好的WCF Windows服务选项或同等版本?

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

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

  

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

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

  

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

将其编写为Windows服务。