.NET Core中的跨平台后台服务(想想windows service / unix守护进程)?

时间:2017-02-27 10:27:03

标签: unix cross-platform .net-core daemon

所以我有一个应用程序,它由API和Windows服务(由Topshelf包装)组成,它使用RabbitMQ持续监听事件并按需处理数据。

对于教育和娱乐,我试图将其重写为可在.NET Core和unix上运行的等效设置(例如在AWS上的docker容器中)

如果我想保持跨平台的话,那么使用.NET Core实现等效于Windows服务(永远运行的后台进程)的最佳方法是什么?

2 个答案:

答案 0 :(得分:13)

Windows服务本身是一个控制台应用程序,它符合Windows服务控制管理器的接口规则和协议。您可以使用.net核心控制台应用程序作为主机在两个平台上实现相同的功能。它需要进行一些额外的配置,使其更像真实的服务/守护程序。

的Linux

E.g。对于Linux,您可以使用SystemD。 您需要先创建一个类似于此的SystemD配置文件:

[Unit]
Description=daemon service
After=network.target

[Service]
ExecStart=/usr/bin/dotnet $(pwd)/bin/daemonsrv.dll 10000
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

然后配置SystemD以使其了解您的服务配置

# Copy service file to a System location
sudo cp daemonsrv.service /lib/systemd/system

# Reload SystemD and enable the service, so it will restart on reboots

sudo systemctl daemon-reload 
sudo systemctl enable daemonsrv

# Start service
sudo systemctl start daemonsrv

# View service status
systemctl status daemonsrv

对于Windows,您应该使用不同的工具集来完成相同的操作。您将不得不使用第三方服务管理器来避免紧密的Windows绑定。 例如。你可以使用NSSM。这里有一篇很好的文章,里面有关于它的例子 - .Net Core console application as a Windows Service

顺便说一句,在Windows的情况下,您仍可以使用普通的Windows服务设置作为主机。并为您的Unix环境(控制台应用程序主机)编写另一台主机。它们都可以共享业务逻辑,只有它们对系统事件的反应方式才会不同。

希望它有所帮助。

答案 1 :(得分:0)

请参阅工作程序服务(.NET Core 3.x):

您可以从新的Visual Studio 2019 Worker Service项目模板创建一个模板,也可以使用.NET CLI创建一个模板

dotnet new worker

另请参阅: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio