【问题标题】:SignalR not broadcasting data to clients after page refresh页面刷新后 SignalR 不向客户端广播数据
【发布时间】:2015-06-17 16:26:30
【问题描述】:

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

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

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

客户端:

$(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);
        }
    }
}

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

【问题讨论】:

    标签: jquery asp.net ajax signalr signalr-hub


    【解决方案1】:

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

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

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

    IHubContext context = GlobalHost.ConnectionManager.GetHubContext<LocalServerHub>();
    
    return context.Clients.Caller.RecievedUpdatedStats(_jsonStatsData).ToString();
    

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2019-07-31
      • 2020-02-26
      • 1970-01-01
      • 2013-07-30
      • 2016-12-02
      相关资源
      最近更新 更多