我尝试使用OWIN将Web API应用程序作为Windows服务运行。但是,在尝试启动服务时,我收到以下消息:
本地计算机上的[ServiceName]服务已启动,然后停止。如果某些服务未被其他服务或程序使用,则会自动停止。
由于某些原因,我的服务并不了解它应该继续听http://localhost:9000
VS解决方案包含两个项目:Web API和Windows服务。
在Windows服务项目中,我有:
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service()
};
ServiceBase.Run(ServicesToRun);
}
}
public partial class Service : ServiceBase
{
private const string _baseAddress = "http://localhost:9000/";
private IDisposable _server = null;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_server = WebApp.Start<Startup>(url: _baseAddress);
}
protected override void OnStop()
{
if (_server != null)
{
_server.Dispose();
}
base.OnStop();
}
}
在 OnStart 中, Startup 指的是Web API项目中的 Startup 类:
public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("Default",
"{controller}/{id}",
new { id = RouteParameter.Optional });
builder.UseWebApi(config);
}
}
(它还包含Unity和日志记录的一些配置。)
我想Windows服务项目的安装程序部分大部分都是无关紧要的,但知道我有以下内容可能很有用:
this.serviceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalService;
我尝试过的事情:
完整源代码: github.com/SabrinaMH/RoundTheClock-Backend/tree/exploring_hosting
答案 0 :(得分:2)
对于该示例OWIN-WebAPI-Service,您必须安装Package
Install-Package Microsoft.Owin.Host.HttpListener