我使用SignalR创建了一个HUB,我在其中订阅统计信息并从服务器接收响应。当我第一次登录时,我收到客户端的所有统计数据,我使用SignalR Hub登录时订阅了。
它通过SignalR HUB不断向客户端广播更新的统计数据,直到我不刷新页面。刷新页面后,SignalR会停止向客户端广播更新的统计数据。
调试时我可以看到数据在_jsonStatsData
变量中,它是集线器上下文的数据,用于将其广播到客户端,但不知何故它不是广播,我在控制台中得到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);
}
}
}
刷新页面后可能出现什么问题? 没有会话超时问题,也没有断开连接问题,但在客户端刷新后仍然没有任何问题。
答案 0 :(得分:0)
这是我多年前所做的事情。它肯定会帮助别人。
在页面刷新后,SignalR停止广播的原因是什么;它失去了必须向其客户广播消息的集线器上下文。
所以我做的是,我为集线器上下文创建了一个新的引用,即使在页面刷新后也会广播消息。
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<LocalServerHub>();
return context.Clients.Caller.RecievedUpdatedStats(_jsonStatsData).ToString();