我正在设置我的GlobalHost配置,方法是在客户端无法访问时跟随this answer收听:
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(50);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
覆盖 HUB类中的 OnDisconnected 方法设置客户端已断开连接
public override Task OnDisconnected(bool stopCalled) {
/*My code for saving the information of disconnecting*/
return base.OnDisconnected(stopCalled);
}
我使用 Xamarin for android 作为客户端并通过覆盖我的活动的 OnStop()方法来调用 Stop()方法,像这样:
protected override void OnStop()
{
//hubConnection.Stop(); previously I was using this but it takes too long to stop the hub connection in this way. so I wrote an explicit method and invoke it .
Task hubconnection = serverHub.Invoke("StopConnection", new object[] { MethodToIdentifyDevice() }).ContinueWith(r =>
{
});
base.OnStop();
}
其次,我编写了一个明确的hubmethod来调用何时明确通知我的服务器我的客户端已停止工作。该方法适用于OnStop事件。
我的实际问题是,如果 上述所有内容都无法在活动停止或应用程序关闭上调用 OnDisconnected 方法。
是否有任何我想念的东西都没有让它发生。
更新: 我已经尝试将传输级别更改为WebSocket,但是在intellisense中提到的Xamarin SDK for SignalR中没有提供它。
答案 0 :(得分:2)
由于Xamarin没有WebSocketTransport,我建议使用“Ping”解决方法。
Ping()
方法。ConnectionId
:DateTime
键/值对保存到服务器端的静态ConcurrentDictionary
。DateTime
是否有所有字典键。