Windows Nancy 服务未启动主机
Windows service with Nancy does not start host
我开发了一个 Windows 服务,它的任务实际上是启动一个具有特定 url
和 port
的主机。下面是我现在的。
Program.cs
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new WindowsDxService()
};
ServiceBase.Run(ServicesToRun);
}
ProjectInstaller.cs
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
}
WindowsDxService.cs
public partial class WindowsDxService : ServiceBase
{
public WindowsDxService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
var url = "http://127.0.0.1:9000";
using (var host = new NancyHost(new Uri(url)))
{
host.Start();
}
}
}
ProjectInstaller.cs [Design]
文件中 serviceProcessInstaller1
和 serviceInstaller1
的配置。
serviceProcessInstaller1
Account=LocalSystem
serviceInstaller1
StartType=Automatic
Library.cs
public class Library : NancyModule
{
public Library()
{
Get["/"] = parameters =>
{
return "Hello world";
};
Get["jsontest"] = parameters =>
{
var test = new
{
Name = "Guruprasad Rao",
Twitter="@kshkrao3",
Occupation="Software Developer"
};
return Response.AsJson(test);
};
}
}
基本上我遵循了 this tutorial
,它实际上展示了如何使用 Console application
做到这一点,虽然我成功了,但我想把它作为 Windows Service
每当系统启动时,它实际上会启动一个 host
并指定 port
。该服务已成功启动 运行 但是每当我在同一系统中浏览 url
它没有显示页面,这意味着我们的基本 This webpage is not available
信息。我还需要做什么配置才能启动 host
?希望得到帮助。
您在启动服务时正在处理主机。我会建议这样的事情:
public partial class WindowsDxService : ServiceBase
{
private Host host;
public WindowsDxService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.host = new NancyHost(...)
this.host.Start();
}
protected override void OnStop()
{
this.host.Stop();
this.host.Dispose();
}
}
如果您使用 TopShelf 库,您可能会发现编写服务会容易得多。
我开发了一个 Windows 服务,它的任务实际上是启动一个具有特定 url
和 port
的主机。下面是我现在的。
Program.cs
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new WindowsDxService()
};
ServiceBase.Run(ServicesToRun);
}
ProjectInstaller.cs
[RunInstaller(true)]
public partial class ProjectInstaller : System.Configuration.Install.Installer
{
public ProjectInstaller()
{
InitializeComponent();
}
}
WindowsDxService.cs
public partial class WindowsDxService : ServiceBase
{
public WindowsDxService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
var url = "http://127.0.0.1:9000";
using (var host = new NancyHost(new Uri(url)))
{
host.Start();
}
}
}
ProjectInstaller.cs [Design]
文件中 serviceProcessInstaller1
和 serviceInstaller1
的配置。
serviceProcessInstaller1
Account=LocalSystem
serviceInstaller1
StartType=Automatic
Library.cs
public class Library : NancyModule
{
public Library()
{
Get["/"] = parameters =>
{
return "Hello world";
};
Get["jsontest"] = parameters =>
{
var test = new
{
Name = "Guruprasad Rao",
Twitter="@kshkrao3",
Occupation="Software Developer"
};
return Response.AsJson(test);
};
}
}
基本上我遵循了 this tutorial
,它实际上展示了如何使用 Console application
做到这一点,虽然我成功了,但我想把它作为 Windows Service
每当系统启动时,它实际上会启动一个 host
并指定 port
。该服务已成功启动 运行 但是每当我在同一系统中浏览 url
它没有显示页面,这意味着我们的基本 This webpage is not available
信息。我还需要做什么配置才能启动 host
?希望得到帮助。
您在启动服务时正在处理主机。我会建议这样的事情:
public partial class WindowsDxService : ServiceBase
{
private Host host;
public WindowsDxService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
this.host = new NancyHost(...)
this.host.Start();
}
protected override void OnStop()
{
this.host.Stop();
this.host.Dispose();
}
}
如果您使用 TopShelf 库,您可能会发现编写服务会容易得多。