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

时间:2015-07-07 16:41:34

标签: c# windows-services signalr self-hosting

我正在尝试构建一个自托管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);

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

因为我没有在

之前建立自托管服务,所以很少丢失

1 个答案:

答案 0 :(得分:4)

通常,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提供了一个可理解的概述。