SignalR 自托管 Windows 服务,监听消息

Posted

技术标签:

【中文标题】SignalR 自托管 Windows 服务,监听消息【英文标题】:SignalR self hosted windows service, listening for messages 【发布时间】:2015-09-25 07:06:06 【问题描述】:

我正在尝试构建一个自托管 SignalR 的 Windows 服务。

我已经阅读了SignalR Self-Host on ASP.Net等教程

我注意到,至少看起来,它们是基于广播消息的,并且似乎找不到任何关于收听的东西。

我需要收听来自服务内的消息以及广播。

我们已经完成了背板设置 - 与网站使用的背板相同。

在网站中,我可以通过 javascript 加入群组。如何加入自托管 SignalR 服务中的组。

在网站中,我在集线器上注册了回调。如何在自托管服务中注册相同的回调?

我有一些用于注册和启动 SignalR 的示例代码是:

GlobalHost.DependencyResolver.UseSqlServer(Settings.Default.ISDBContext);
        app.Map("/signalr", map =>
        
            map.UseCors(CorsOptions.AllowAll);
            HubConfiguration hubConfig = new HubConfiguration()
            
                EnableDetailedErrors = true,
                EnableJSONP = true,
            ;

            map.RunSignalR(hubConfig);

        );

然后我像这样启动我的 webApp:

SignalR = WebApp.Start<Startup>(options);

options 是我正在注册的网址。 Startup 是包含上述 signalR 映射的启动类。

这里有点迷失,因为我之前没有建立过自托管服务

【问题讨论】:

这里是工作示例。只需更改端口并编译为 4.6.1。 code.msdn.microsoft.com/windowsapps/… 【参考方案1】:

一般而言,SignalR 提供了一个实时消息传递环境,其优点是它可以将消息推送给客户端,而无需客户端请求更新(您已经阅读了介绍,就足够了)。是否从服务中启动自托管应该没有区别。

根据我从您的场景中了解到的情况:您需要使用自托管服务中的消息。我认为您可能只需要提示SignalR Desktop Client。我认为您的应用程序/服务应该启动服务,然后充当服务本身的客户端。这将是最干净的方法。

作为 javascript 客户端,它充当具有相同功能的服务消费者:

HubConnection conn = new HubConnection("http://192.168.1.1:8080");
IHubProxy hub = conn.CreateHubProxy("ChatHub");

// call from hub to client
hub.On<string, string>("addMessage", (name, message) =>

     // Handle incoming data update
);

从桌面客户端到中心反之亦然:

await hub.Invoke<string, string>("Send", name, message);

要使用组,需要在您的中心内定义逻辑。文档Working with groups 提供了一个易于理解的概述。

【讨论】:

太棒了,谢谢。我终于想通了集线器。昨天,虽然无法确定调用部分。我做错了,以为我会以某种方式通过 SQL 背板收听消息。

以上是关于SignalR 自托管 Windows 服务,监听消息的主要内容,如果未能解决你的问题,请参考以下文章

连接到 Windows 服务中自托管的 SignalR 的问题

NancyFx+SignalR 自托管和 Windows 服务

自托管 SignalR 应用程序拒绝 CORS 请求

带有控制台/Windows服务示例VS2010的signalR自主机

SignalR 自托管与 WCF 服务和客户端将是桌面用户

具有自托管的 SignalR 客户端服务器应用程序