我为长期问题道歉(我必须描绘出全貌)。
我有一个SignalR Hub,我正在我的一个服务中注入,这是服务:
private readonly INotificationRepository _notificationRepository;
private readonly INotificationHub _notificationHub;
private readonly IUserRepository _userRepository;
public NotificationService(INotificationRepository notificationRepository,
INotificationHub notificationHub,
IUserRepository userRepository)
{
_notificationRepository = notificationRepository;
_notificationHub = notificationHub;
_userRepository = userRepository;
}
这就是我的NotificationHub的样子:
[Authorize]
public class NotificationHub : Hub, INotificationHub
{
// other stuff here
// works - no issues -> Context.User.Identity.Name has a value as expected
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
// do stuff with the name ...
return base.OnConnected();
}
// at random intervals is being trigerred
// and Context.User.Identity throws a "ObjectDisposedException"
public override Task OnDisconnected()
{
string name = Context.User.Identity.Name;
// do some more stuff with the name ...
return base.OnDisconnected();
}
}
这就是我连接IoC(在这种情况下为Autofac)的方式:
builder.RegisterType<NotificationService>().As<INotificationService>().InstancePerHttpRequest();
builder.RegisterType<NotificationRepository>().As<INotificationRepository>().InstancePerHttpRequest();
builder.RegisterType<UserRepository>().As<IUserRepository>().InstancePerHttpRequest();
builder.RegisterType<NotificationHub>().As<INotificationHub>().ExternallyOwned();
我已经被困在这里几个小时了,我感觉我没有正确连接我的依赖关系(就生命范围而言)。但是我无法理解。
修改
我刚刚使用Chrome进行了测试,它似乎正在运行 - 只在IE中引发异常(在我的情况下,我已经使用IE11进行了测试)。
此外,我正在使用Windows身份验证(在使用表单身份验证的其他项目上尝试过它,它似乎正在运行)。
不确定是否有错误。
答案 0 :(得分:1)
我尝试过很多东西,并设法通过在客户端添加以下内容来解决此问题:
window.onbeforeunload = function (e) {
$.connection.hub.stop();
};
我相信这是我使用的SignalR版本中的一个错误(2.0.3)。我已将其记录在此处:https://github.com/SignalR/SignalR/issues/2972