用于计时器应用的nuget包Microsoft.AspNet.SignalR.2.0.3中不存在信号R IDisconnect和IConnected

时间:2014-06-09 16:30:47

标签: asp.net asp.net-mvc signalr

我正在使用mvc中的信号r实现一个计时器应用程序。我从nuget安装了Microsoft.AspNet.SignalR.2.0.3软件包。但我没有像直接信号r包中那样获得接口IDisconnect和IConnected。这里提供的任何替代解决方案,以便我可以编写这些接口的Connected和Disconnected方法。 我从链接中引用了这个教程: - http://www.dotnetcurry.com/showarticle.aspx?ID=826 我创建了如下集线器: -

public class TimerHub : Hub, Microsoft.AspNet.SignalR.IConnection
    {
        public Task Disconnect()
        {
            TimerEventHandler.Instance.Disconnect(Context.ConnectionId);
            return Clients.Client(Context.ConnectionId).leave(Context.ConnectionId,
                DateTime.Now.ToString());
        }
        public Task Connect()
        {
            string connectionName = Context.ConnectionId;
            if (Context.User != null && Context.User.Identity != null
                && Context.User.Identity.IsAuthenticated)
            {
                TimerEventHandler.Instance.UpdateCache(
                    Context.User.Identity.Name,
                    Context.ConnectionId,
                    ConnectionStatus.Connected);
                connectionName = Context.User.Identity.Name;
            }
            return Clients.Client(Context.ConnectionId).joined(connectionName,
                DateTime.Now.ToString());
        }

}

1 个答案:

答案 0 :(得分:0)

在SignalR 2.0.3中,OnConnectedOnDisconnected被定义为Hub基类中的虚方法。

你不应该试图建立IConnection界面。

你的TimerHub应该看起来像这样:

public class TimerHub : Hub
{
    public override Task OnConnected()
    {
        TimerEventHandler.Instance.Disconnect(Context.ConnectionId);
        return Clients.Caller.leave(Context.ConnectionId,
            DateTime.Now.ToString());
    }

    public override Task OnDisconnected()
    {
        string connectionName = Context.ConnectionId;
        if (Context.User != null && Context.User.Identity != null
            && Context.User.Identity.IsAuthenticated)
        {
            TimerEventHandler.Instance.UpdateCache(
                Context.User.Identity.Name,
                Context.ConnectionId,
                ConnectionStatus.Connected);
            connectionName = Context.User.Identity.Name;
        }
        return Clients.Caller.joined(connectionName,
            DateTime.Now.ToString());
    }
}