【发布时间】:2016-11-23 11:58:01
【问题描述】:
我的问题是如何在以前的 .net 版本中编写的 .net core 中编写 windows 服务?
许多链接/文章解释了如何将您的 .net 核心应用程序托管为 Windows 服务。那么这是我创建 Windows 服务的唯一方法吗?
如果是,谁能提供它的链接/示例
谢谢!
【问题讨论】:
标签: c# asp.net-core windows-services .net-core
我的问题是如何在以前的 .net 版本中编写的 .net core 中编写 windows 服务?
许多链接/文章解释了如何将您的 .net 核心应用程序托管为 Windows 服务。那么这是我创建 Windows 服务的唯一方法吗?
如果是,谁能提供它的链接/示例
谢谢!
【问题讨论】:
标签: c# asp.net-core windows-services .net-core
这是在 .net Core(控制台应用)中构建 windows 服务的另一种简单方法
允许将点网核心应用程序作为 Windows 服务托管的简单库。
使用 nuget: 安装包 PeterKottas.DotNetCore.WindowsService
创建您的第一个服务,如下所示:
public class ExampleService : IMicroService
{
public void Start()
{
Console.WriteLine("I started");
}
public void Stop()
{
Console.WriteLine("I stopped");
}
}
服务 API:
ServiceRunner<ExampleService>.Run(config =>
{
var name = config.GetDefaultName();
config.Service(serviceConfig =>
{
serviceConfig.ServiceFactory((extraArguments) =>
{
return new ExampleService();
});
serviceConfig.OnStart((service, extraArguments) =>
{
Console.WriteLine("Service {0} started", name);
service.Start();
});
serviceConfig.OnStop(service =>
{
Console.WriteLine("Service {0} stopped", name);
service.Stop();
});
serviceConfig.OnError(e =>
{
Console.WriteLine("Service {0} errored with exception : {1}", name, e.Message);});
});
});
运行不带参数的服务,它像控制台应用程序一样运行。
【讨论】:
不确定是否有这样做的默认方式。但是,您可以让您的核心应用程序继承自 ServiceBase 并实现必要的覆盖。我们在我们的应用程序中执行此操作(请注意,我们针对的是完整框架,而不是核心)。最初的想法来自以下文章:
请注意,这些文章仍然引用 DNX(从 .NET Core 测试版开始) - 现在您的核心应用程序将编译为 exe,因此您可以调整他们的示例以适应这种情况。
This is 一种使用 .net 核心构建 Windows 服务的方法。
它是使用对本地 Windows 程序集的 P/Invoke 调用构建的。
windows服务编写示例(取自github项目页面):
using DasMulli.Win32.ServiceUtils;
class Program
{
public static void Main(string[] args)
{
var myService = new MyService();
var serviceHost = new Win32ServiceHost(myService);
serviceHost.Run();
}
}
class MyService : IWin32Service
{
public string ServiceName => "Test Service";
public void Start(string[] startupArguments, ServiceStoppedCallback serviceStoppedCallback)
{
// Start coolness and return
}
public void Stop()
{
// shut it down again
}
}
它是not perfect,但恕我直言,它非常好。
【讨论】: