【问题标题】:SignalR hub is shortlivedSignalR 集线器寿命短
【发布时间】:2018-05-31 14:41:32
【问题描述】:

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

我有一个 Hub 派生类,它具有来自 Angular 客户端的发送和接收。

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

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

客户端显示为始终连接。没有断开连接的消息。

我错过了什么?

【问题讨论】:

    标签: signalr signalr-hub


    【解决方案1】:

    你不应该自己持有这个实例,而且你永远不要自己创建一个实例。

    在此处阅读有关集线器项目生命周期的详细信息: 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");
    

    (如果您使用的是核心信号器,请阅读:Call SignalR Core Hub method from Controller

    【讨论】:

    • 非常接近。我必须添加一个 GlobalHost.DependencyResolver = ... 谢谢。
    猜你喜欢
    • 2021-05-27
    • 2022-08-09
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多