单独的工作者角色与Windows服务以及另一个角色

时间:2015-02-26 23:43:05

标签: c# azure backgroundworker azure-worker-roles

Windows服务应用程序可用于创建具有自己会话的长时间运行的应用程序。它们可以在后台运行而不会干扰主要(或业务线)应用程序。在Azure上运行这些应用程序的方法可以通过启动任务定义与实际角色一起完成(请参阅12)。

另一方面,工作者角色本身一直在后台工作,就像长时间运行的任务一样。在RoleEntryPoint定义之上,我可以更轻松地处理启动,停止和运行流程(OnStart()OnStop()Run()方法)。实际上,该角色还提供了更新实时配置的功能。此外,还提供了性能指标。同样,您可以在提升模式下运行辅助角色。

在这方面,如果我们比较在Windows服务上运行后台任务以及另一个角色与单独的工作者角色,后一种方法似乎是有利的。仍然有理由与前者合作吗?如果是这样,有什么好处?

让我们说这里的任务是监控。后台任务将收集在其他角色上运行的应用程序输出的ETW事件,并将它们保存到持久性存储中。

1 个答案:

答案 0 :(得分:4)

这两者并不相互排斥。您仍然可以安装Windows服务,即使是在辅助角色中也是如此(特别是如果软件ID专门设计用于运行并以这种方式进行管理)。要在工作人员(或Web)角色中执行此操作,您只需捆绑(或下载)相应的安装程序即可设置您的服务。

worker / web角色脚手架本身允许您在Windows VM中运行几乎任何东西。不要把它当作一个后台任务。您可以使用完整的VM。您需要通过启动cmd脚本和/或OnStart()来设置内容。并且您需要通过处理Run()来管理VM实例的生命周期(以防止重新启动)。您可以启动线程,设置并行任务,等等。

现在:无论您选择编写新服务还是仅仅依靠Web / worker脚手架:这取决于您和您的特定应用程序,我不想将此作为主观/基于意见的答案。 :)

还有一件事:当您构建Windows虚拟机(而不是Web /工作者类型)时,您没有角色实例的脚手架,在这种环境中,服务可能更有价值。