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

标签 jquery asp.net ajax signalr signalr-hub

我使用 SignalR 创建了一个 HUB,在其中订阅统计信息并接收来自服务器的响应。当我第一次登录时,我会在客户端收到我使用 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 方法和委托(delegate):

[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);
        }
    }
}

刷新页面后可能出现什么问题? 没有 session 超时问题,也没有断开连接问题,但在客户端刷新后我仍然什么也没有得到。

最佳答案

这是我几年前所做的事情。这肯定会帮助其他人。

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

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

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

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

关于jquery - 页面刷新后 SignalR 不向客户端广播数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897235/

相关文章:

javascript - Jquery 附加到(按 id 动态)

javascript - 如何使用 JavaScript 显示 Facebook 评论?

javascript - 如果 text-indent 设置为百分比值,它用于计算的宽度是多少?

C#:选择具有包含子字符串的属性的节点的 XPath?

javascript - jQuery 将 CSS 类添加到动态创建的元素

ajax - ASP MVC 5 – 使用 Ajax 和 jQuery UI 对话框删除确认

javascript - Tampermonkey jQuery 需要不工作

css - asp :label with CSS? 如何设置数字格式

c# - 无法在 ASP.NET C# 中删除 cookie

javascript 里面的 php 和里面的 javascript php 代码