据我了解,在RC2中支持在Windows服务中托管应用程序。 我尝试在一个简单的Web API项目上进行测试(使用.NET Framework 4.6.1)。
这是我的Program.cs代码:
using System;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.WindowsServices;
namespace WebApplication4
{
public class Program : ServiceBase
{
public static void Main(string[] args)
{
if (args.Contains("--windows-service"))
{
Run(new Program());
return;
}
var program = new Program();
program.OnStart(null);
Console.ReadLine();
program.OnStop();
}
protected override void OnStart(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.RunAsService();
}
protected override void OnStop() {}
}
}
除此之外的所有内容基本上都来自于.NET Core模板(尽管我将框架更改为net461并在project.json中添加了一些依赖项)。
使用dotnet publish
进行发布,并使用sc create
创建Windows服务,我可以成功启动我的服务,但我无法访问任何控制器(端口没有监听)。我想我做错了什么。
所以我猜主要问题是如何创建自托管Web API并将其作为Windows服务运行。所有找到的解决方案在RC2更新后都不起作用。
--windows-service
参数,你的代码就可以正常工作。 - svickSystem.ServiceProcess
在netcoreapp1.0
(CoreCLR) 中还不可用。如上所述,您需要针对完整框架,例如net461
,然后引用frameworkAssemblies
。 - Stajs