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 服务