SignalR Hub OnDisconnect引发ObjectDisposedException

时间:2014-04-06 10:09:36

标签: c# asp.net-mvc dependency-injection signalr autofac

我为长期问题道歉(我必须描绘出全貌)。

我有一个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身份验证(在使用表单身份验证的其他项目上尝试过它,它似乎正在运行)。

不确定是否有错误。

1 个答案:

答案 0 :(得分:1)

我尝试过很多东西,并设法通过在客户端添加以下内容来解决此问题:

window.onbeforeunload = function (e) {
    $.connection.hub.stop();
};

我相信这是我使用的SignalR版本中的一个错误(2.0.3)。我已将其记录在此处:https://github.com/SignalR/SignalR/issues/2972