C# 自托管信号机服务赢得';t工作(开始)

C# 自托管信号机服务赢得';t工作(开始),c#,signalr,C#,Signalr,我将SignalR服务器作为类库项目,并在控制台应用程序中引用它(以模拟Windows服务) 这是信号员的代码 public void Start() { try { string url = @"http://*:8081"; using (WebApp.Start<Startup>(url)) { Logger.Info(stri

我将SignalR服务器作为类库项目,并在控制台应用程序中引用它(以模拟Windows服务)

这是信号员的代码

    public void Start()
    {
        try
        {
            string url = @"http://*:8081";
            using (WebApp.Start<Startup>(url))
            {
                Logger.Info(string.Format("Server running at {0}", url));
            }
        }
        catch (Exception ex)
        {
            Logger.Exception(ex, "Signalr start");
        }

        Run = true;

        Logger.Info("Starting Worker");
        workerThread = new Thread(() =>
        {
            Worker();
        });

        workerThread.Start();
    }
所以,它在一个线程中,而worker在另一个线程中。这似乎很好,因为我在其他项目中做了它的工作。工作线程不是问题,它只是一个空循环,和服务器没有任何关系

问题是服务器似乎“停止”——当我使用Netstat查看时,并没有人在侦听端口8081。没有例外,它只是默默地失败了

我在实际运行此服务器的控制台项目中引用了Owin.Cors(和Owin.Host.HttpListener),但正如我所说的,服务器只是停止了

当我尝试连接时,客户端说“连接被主动拒绝”,Putty(telnet)也说“无法连接”

问题在哪里?简而言之,我有一个带有signarserver的类库,它在运行它的控制台项目中被引用,但服务器无法工作

[编辑]

还有启动服务的控制台应用程序的代码

    static void Main(string[] args)
    {
        ServiceEngine Engine = new ServiceEngine();
        Engine.Start();
        Console.ReadKey();
        Engine.Stop();
    }

顺便说一句,很抱歉我的英语不好。

嗯,我解决了。这里有一个问题:

    public static void Start()
    {
        try
        {
            string url = @"http://127.0.0.1:8081";
            WebApp.Start<Startup>(url);
            Logger.Info(string.Format("Server running at {0}", url));
        }
        catch (Exception ex)
        {
            Logger.Exception(ex, "signalr start");
        }

        Run = true;

        Logger.Info("Starting Worker");
        workerThread = new Thread(() =>
        {
            Worker();
        });

        workerThread.Start();
    }
publicstaticvoidstart()
{
尝试
{
字符串url=@“http://127.0.0.1:8081";
WebApp.Start(url);
Info(string.Format(“在{0}运行的服务器”,url));
}
捕获(例外情况除外)
{
记录器异常(例如,“信号机启动”);
}
Run=true;
Logger.Info(“起始工人”);
workerThread=新线程(()=>
{
工人();
});
workerThread.Start();
}

正如您所看到的,using语句已被删除,现在可以正常工作了!有趣的注意事项-您也可以对这个“引擎”进行单例实现,它也会工作。

我在做了大量的研发后得到了解决方案。这是一个与帐户和访问权限相关的简单更改。

在服务安装程序中使用LocalSystem帐户而不是LocalService帐户。

您可以通过在服务安装程序的设计视图中执行以下更改来执行此操作:
服务流程安装程序的属性->将帐户设置为LocalSystem。

或者在服务安装程序的designer.cs文件中执行以下更改:

this.serviceProcessInstaller1.Account=System.ServiceProcess.ServiceAccount.LocalSystem

@Matei_Radu,我会的,只要网站允许。。。上面说两天后。
    public static void Start()
    {
        try
        {
            string url = @"http://127.0.0.1:8081";
            WebApp.Start<Startup>(url);
            Logger.Info(string.Format("Server running at {0}", url));
        }
        catch (Exception ex)
        {
            Logger.Exception(ex, "signalr start");
        }

        Run = true;

        Logger.Info("Starting Worker");
        workerThread = new Thread(() =>
        {
            Worker();
        });

        workerThread.Start();
    }