我正在使用带有SQL作为背板的SignalR 1.1.2,并经常(如70%的页面加载),SignalR触发协商请求,它继承(不会失败)并且只是停止并且不再发生任何事情。我发现与jquery.validation.js存在一些冲突 所以我更新了:jquery,jquery验证和jquery unobtrusive ajax到最新的可用版本,但它仍然发生,
其他时候,当它正常工作时,我可以看到很少的XHR请求:
协商
连接
平
这是我的中心:
public class NotificationsHub : Hub
{
public override Task OnConnected()
{
Groups.Add(Context.ConnectionId, CurrentUser.UserId.ToString());
return base.OnConnected();
}
public override Task OnDisconnected()
{
Groups.Remove(Context.ConnectionId, CurrentUser.UserId.ToString());
return base.OnDisconnected();
}
}
我的客户代码:
$(document).ready(function () {
var nh = $.connection.notificationsHub;
nh.notify = function (notificationHtml) {
$('#notification-box').find('ul').prepend(notificationHtml);
$('#notification-bubble').text($('#notification-bubble').text() + 1);
};
$.connection.hub.start();
});
刷新页面时出现错误:
The connection to http://localhost:55087/signalr/connect?transport=serverSentEvents&connectionToken=FuqvvQJaxyCfy0dj2DEoZQFkBmthBk9LxU6ZEGZO4ypbSy8pUpzrvCKWTjykxp9E9GtMdwLI0sX_tWkvK1XfJaEtjFHOL3Qmeg2eILh4pTZnEzXDyq6KPuvPw_4kzj9VtNe89YsWW-3sstPwu_I60A2&connectionData=%5B%5D&tid=4 was interrupted while the page was loading.
然后跟随POST请求成功:
http://localhost:55087/signalr/abort?transport=serverSentEvents&connectionToken=FuqvvQJaxyCfy0dj2DEoZQFkBmthBk9LxU6ZEGZO4ypbSy8pUpzrvCKWTjykxp9E9GtMdwLI0sX_tWkvK1XfJaEtjFHOL3Qmeg2eILh4pTZnEzXDyq6KPuvPw_4kzj9VtNe89YsWW-3sstPwu_I60A2
这是一个快速修复,但我想知道这是SignalR的错误或正常行为:
SignalR event becomes intermittent when deployed to a server
更新2:
从上面的工作修复,但长期调查XHR请求持续了几分钟,这对我来说似乎很奇怪,客户端在几分钟后更新请求已完成,这是不可接受的,所以我决定将SignalR升级到2.0.0 beta2
在我第一次运行应用程序后,SignalR无法连接(大约一秒钟后超时).. 第二次一切正常,长期民意调查XHR在2秒内完成。 第三次回到第一步,没有ping,没有connnect,没有长轮询请求。但是当从服务器端触发某些内容时,它会立即更新,就像它通过websockets连接一样..我只能在调试窗口中看到:
[00:12:52 GMT + 0200(中欧标准时间)] SignalR:在集线器'NotificationsHub'上触发客户端集线器事件'notify'。
以下是我对Hub使用SignalR 2.0.0 beta2进行的更改
public class NotificationsHub : Hub
{
public async override Task OnConnected()
{
var user = WebSecurity.GetUserId(Context.User.Identity.Name);
Groups.Add(Context.ConnectionId, user.ToString());
await base.OnConnected();
}
// OnDisconnected() was dropped thanks to N. Taylor Mullen
}
客户方:
$(document).ready(function () {
$.connection.notificationsHub.client.notify = function (notificationHtml) {
$('#notification-box').find('ul').prepend(notificationHtml);
$('#notification-bubble').text(parseInt($('#notification-bubble').text()) + 1);
};
$.connection.hub.logging = true; // optional, if you want to see what's going on
$.connection.hub.start();
});
答案 0 :(得分:1)
您的连接中断应该通过重新连接事件来解决。然而,这似乎并没有发生。您的Hub中存在一些问题,请将其修改为:
public class NotificationsHub : Hub
{
public override Task OnConnected()
{
// Ensure that the group is added before completing OnConnected
return Groups.Add(Context.ConnectionId, CurrentUser.UserId.ToString());
}
// Never remove from group in OnDisconnected, ConnectionId's are auto-removed from groups when they disconnect.
}