页面刷新后 SignalR 不向客户端广播数据

SignalR not broadcasting data to clients after page refresh

我使用 SignalR 创建了一个集线器,我在其中订阅统计信息并接收来自服务器的响应。当我第一次登录时,我会在客户端收到我在登录时使用 SignalR Hub 订阅的所有统计信息。

它通过 SignalR HUB 不断向客户端广播更新的统计信息,直到我不刷新页面为止。刷新页面后,SignalR 将停止向客户端广播更新的统计信息。

调试时我可以看到数据在 _jsonStatsData 变量中,它是集线器上下文的数据,用于将其广播到客户端,但不知何故它没有广播,我得到 null console.log.

客户端:

$(function () {

    var notifications = $.connection.localServerHub;

    notifications.client.receivedUpdatedStats = function (updatedStats) {

       console.log(updatedStats); 

    };  

    $.connection.hub.logging = true;

    $.connection.hub.start().done(function () {

        // Passing the Stats value from here e.g 5
        notifications.server.subscribeStats(5);

    }).fail(function (e) {
        alert(e);
    });

}); 

HUB 方法和委托:

[HubName("localServerHub")]
public class LocalServerHub : Hub
{
    private string _jsonStatsData = string.Empty;

    [HubMethodName("subscribeStats")]
    public string SubscribeStats(string statId)
    {
        lock (LoginUsers.ConnectedUsersList)
        {

            if (!_objHubClient.Subscribe)
            {
                _objHubClient.ResponseEvent += new HubClient.ResponseBO(Response_Recieved);

                _objHubClient.Subscribe = true;
            }

            objHubClient.SubscribeStatsNotifications(Convert.ToInt32(statId));

            return Clients.Caller.RecievedUpdatedStats(_jsonStatsData).ToString();
        }
    }

    private void Response_Recieved(Messages objMessage)
    {
        try
        {
            if (objMessage.OperationType == Operation.StatsUpdateNotification)
            {
                _jsonStatsData = JsonConvert.SerializeObject(objMessage.ResponseStats);
                SubscribeQueueStats(string.Empty);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
}

刷新页面后可能是什么问题? 没有会话超时问题,也没有断开连接问题,但在客户端刷新后我仍然一无所获。

这是我多年前所做的。它肯定会帮助别人。

SignalR 在页面刷新后停止广播的原因是;它失去了它必须向其客户端广播消息的集线器上下文。

所以我所做的是,我为集线器上下文创建了一个新引用,即使在页面刷新后也能广播消息。

IHubContext context = GlobalHost.ConnectionManager.GetHubContext<LocalServerHub>();

return context.Clients.Caller.RecievedUpdatedStats(_jsonStatsData).ToString();