【问题标题】:SignalR self hosted windows service, listening for messagesSignalR 自托管 Windows 服务,监听消息
【发布时间】: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 映射的启动类。

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

【问题讨论】:

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


【解决方案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 背板收听消息。
猜你喜欢
  • 2015-12-15
  • 2014-02-06
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多