c# - 自托管 SignalR 服务将无法工作(开始)

标签 c# signalr

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

这是 SignalR 的代码

    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();
    }

这是启动类

    public class Startup
    {
        Microsoft.AspNet.SignalR.HubConfiguration hubconfiguration = null;

        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            hubconfiguration = new HubConfiguration();
            hubconfiguration.EnableDetailedErrors = true;
            app.MapSignalR(hubconfiguration);
        }
    }

因此,它在一个线程中,worker 在另一个线程中。这似乎很好,因为我在它工作的其他项目中做了它。工作线程没有问题,它只是一个空循环,与服务器没有任何关系。

问题是服务器似乎“停止”了 - 当我使用 Netstat 查看时,没有人在监听端口 8081。没有异常(exception),它只是默默地失败。

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

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

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

[编辑]

还有启动服务的Console app代码

    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();
    }

如您所见,using 语句已被删除,现在可以正常工作了!有趣的是——你也可以让这个“引擎”的单例实现,它也能工作。

关于c# - 自托管 SignalR 服务将无法工作(开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32033946/

相关文章:

c# - 上传任何视频并在 .net 中在线转换为 .mp4

c# - ASP.NET MVC 中的自动递增 ID

c# - Asp.Net Core 2.0 session 破坏了每个构建

c# - 如何防止生成的接口(interface)实现使用类型别名?

c# - 如何保护在 SignalR 中监听的事件?

c# - 电子邮件删除附件后,错误 "The process cannot access the file because it is being used by another process."

c# - 我需要使用 Web API 和 JSON 通过互联网传输 100 万行

azure - Microsoft.Identity.Web 和 ASP.NET Core SignalR JWT 身份验证

javascript - signalR 核心定义传输

c# - SignalR 客户端中心代理未定义