SignalR 集线器是短暂的

SignalR hub is shortlived

我在桌面 C# 应用程序中有一个自托管的 webApi 项目。这使用 Microsoft.Owin.Hosting.WebApp.

我有一个派生的 class 集线器,它具有来自 angular 客户端的发送和接收。

集线器由 WebApp.start 实例化。我发现它是短暂的。当客户端发送消息时,集线器被实例化,然后被释放。我需要向客户端发送消息,但我没有集线器的实例来向另一个方向发送消息。

有一次,我持有实例的引用(如内存泄漏),我可以向客户端发送消息。

客户端显示始终处于连接状态。没有断开连接的消息。

我错过了什么?

你不应该自己持有这个实例,你也不应该自己创建一个实例。

在此处阅读有关集线器对象生命周期的详细信息: https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-server#hub-object-lifetime

如果您需要向连接的客户端发送消息,则需要使用 GetHubContext。

示例:

var context = GlobalHost.ConnectionManager.GetHubContext<yourHub>();
context.Clients.All.Send("Something");

(如果您使用的是核心信号器,请阅读: