C# 工作服务 vs Windows 服务

55

工作服务项目模板Windows服务项目模板之间的主要区别是什么?哪一个更好用?

什么情况下可以使用工作服务和Windows服务?


@DourHighArch:我认为Dina指的是ASP.NET Core中使用托管服务进行后台任务的方法。在Visual Studio中,可以使用_Worker Service_模板来创建这些服务。 - Jeremy Caney
@DourHighArch:或者说,任何.NET Core应用程序都可以;它们不仅限于ASP.NET Core。 - Jeremy Caney
为了完整起见:Windows服务(如在Visual Studio项目模板中所见):https://learn.microsoft.com/en-us/dotnet/framework/windows-services/introduction-to-windows-service-applications - A.J.Bauer
2个回答

33

两者都是真正的服务。

Windows服务存在已有20年之久。它们通常在系统启动时开始运行,并一直保持运行状态。

工作服务也是一个真正的进程,但其旨在成为前端应用程序的后台服务;它随应用程序启动而启动,随应用程序停止而停止。

尽管如此,工作服务也可以被配置为运行为Windows服务

因此,从C#的角度来看,工作服务与任务或线程的概念是相同的。但是它在自己的地址和内存空间中运行,因此即使应用程序崩溃,它也不会崩溃。


我认为目前还无法确定 OP 所指的 "worker service" 的含义。 - user585968
相信线程与进程共享同一内存空间。此外,如果“应用程序崩溃”,则根据定义,线程将随着进程的结束而结束。 - user585968
1
@MickyD 你可以直接谷歌搜索。https://medium.com/@nickfane/introduction-to-worker-services-in-net-core-3-0-4bb3fc631225 而且,崩溃会结束一个进程,线程是进程的一部分,它也会结束。但不会结束的是第一个进程启动的第二个进程。 - Holger
3
对于苹果蛋糕,最好使用苹果;对于草莓蛋糕,最好使用草莓。这取决于你想做什么。如果你不想做任何事情,就不要使用它。如果你想在机器启动或应用程序启动时运行某些东西,可能会有所不同。Windows服务需要安装在系统注册表中,您必须拥有管理员权限等。所有这些都不需要用于任何后台进程。 - Holger
1
真的,我没有看到它们之间的区别。 - Mahmod Abu Jehad

4
Windows服务,以前称为NT服务,使您能够创建长时间运行的可执行应用程序,这些应用程序在自己的Windows会话中运行。这些服务可以在计算机启动时自动启动,可以暂停和重新启动,并且不显示任何用户界面。您可以通过创建一个安装为服务的应用程序来轻松创建服务。
工作服务是一个.NET项目,使用模板构建,该模板提供了一些有用的功能,将常规控制台应用程序转变为更强大的东西。工作服务在主机概念的基础上运行,该主机维护应用程序的生命周期。主机还提供一些熟悉的功能,例如依赖注入、日志记录和配置。
Windows服务与其他Visual Studio应用程序的区别如下:
  1. 按F5或F11无法调试或运行服务应用程序。
  2. 与某些项目类型不同,您必须为服务应用程序创建安装组件。
  3. 您的服务应用程序的Main方法必须为项目包含的服务发出Run命令。
  4. Windows服务应用程序在与登录用户的交互式站点不同的窗口站点上运行。
  5. Windows服务应用程序在其自己的安全上下文中运行,并且在用户登录安装它们的Windows计算机之前启动。您应该仔细计划要在哪个用户帐户中运行服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接