我需要检测用户何时使用signalr连接和断开连接。
我有这两种集线器方法:
public void Say(string message)
{
Trace.WriteLine(message + " - " + Context.ConnectionId);
}
public void Goodbye(string message)
{
Trace.WriteLine(message + " - " + Context.ConnectionId);
}
我已经实现了Say
方法,它负责检测连接,如下所示:
$.connection.hub
.start()
.done(function () {
hub.server.say("Hello SignalR");
});
但我如何检测断开?
答案 0 :(得分:2)
将此覆盖方法添加到Hub
类:
public override Task OnDisconnected(bool stopCalled)
{
// do the logging here
Trace.WriteLine(Context.ConnectionId + ' - disconnected');
return base.OnDisconnected(stopCalled);
}
这将处理和记录服务器端的断开,而我认为在client
方面跟踪它是没有意义的,因为它不太可能从服务器端终止SignalR会话 - see here。
关于@stuartd
评论的修改:
你也可以覆盖
public override Task OnReconnected()
{
Trace.WriteLine(Context.ConnectionId + ' - reconnected');
return base.OnReconnected();
}
这样您就可以在客户端尝试重新连接到服务器并成功时跟踪案例。
编辑#2:
那么你当然可以使用相同的机制来跟踪OnConnected
事件
public override Task OnConnected()
{
Trace.WriteLine(Context.ConnectionId + ' - reconnected');
return base.OnConnected();
}
因此,所有跟踪代码都可以方便地保存在服务器端,这在客户端登录到集线器但由于某种原因无法执行您用于跟踪已记录状态的方法时更加强大。