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

Dar*_*ght 4 c# windows-services self-hosting signalr

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

我已经阅读了诸如 了ASP.Net上的SignalR Self-Host等

我注意到,至少在看来,它们基于广播消息,似乎在收听周围找不到任何东西。

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

我们已经有了背板设置-该站点使用了相同的设置。

在网站上,我可以通过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);

        });
Run Code Online (Sandbox Code Playgroud)

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

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

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

我之前没有建立过自托管服务,因此在这里几乎没有什么损失

rdo*_*eui 5

总的来说,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
});
Run Code Online (Sandbox Code Playgroud)

从桌面客户端到集线器,反之亦然:

await hub.Invoke<string, string>("Send", name, message);
Run Code Online (Sandbox Code Playgroud)

要使用组,需要在集线器中定义逻辑。与团体一起工作的文档提供了易于理解的概述。