c# – 使用Nancy的Windows服务无法启动主机

我开发了一个Windows服务,其任务实际上是启动具有特定URL和端口的主机.以下是我现在的情况.Program.cs中static void Main(){ServiceBase[] ServicesToRun;ServicesToRun = new ServiceBase[] { new WindowsDxServi...

我开发了一个Windows服务,其任务实际上是启动具有特定URL和端口的主机.以下是我现在的情况.

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,它实际上显示了如何使用我成功的控制台应用程序来完成它,但我希望将其作为Windows服务,实际上在系统启动时启动具有指定端口的主机.该服务已成功启动并正在运行,但每当我浏览同一系统中的URL时,它都不显示该页面,这意味着我们的基本此网页不可用消息.我还需要做什么配置才能启动主机?希望得到帮助.

解决方法:

您在开始服务时处置主机.我会建议这样的事情:

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库,您可能会发现编写服务要容易得多.

本文标题为:c# – 使用Nancy的Windows服务无法启动主机

基础教程推荐