我设置我的GlobalHost配置这样按照this answer时候听一听客户端是无法访问:通知SignalR服务器上的客户端断开连接不留神(可耻)
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(50);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
而且重写的OnDisconnected方法在我的HUB类设置客户端已断开连接
public override Task OnDisconnected(bool stopCalled) {
/*My code for saving the information of disconnecting*/
return base.OnDisconnected(stopCalled);
}
我使用Xamarin的Android作为客户端和调用停止()方法通过重写调用OnStop()我的活动方法,像这样:
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,但在智能感知中提到的SignalR的Xamarin SDK中没有提供它。
您使用哪种传输方式连接到SignalR服务器?尝试使用像'hubConnection.Start(新的WebSocketTransport())' 它会帮助吗? –
它使用.NetFramework 4.5 – Technacron
我不是指平台。我的意思是在客户端指定的传输。请检查[此链接](https://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client#transport)作为参考。 默认的传输是LongPollingTransport,它意外地工作一点点,正如你所描述的:-) WebSocketTransport应该可以解决你的问题,但我知道在Xamarin中的web套接字存在重大问题。所以试着去检查一下。 –