我正在使用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());
}
}
答案 0 :(得分:0)
在SignalR 2.0.3中,OnConnected
和OnDisconnected
被定义为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());
}
}