Я устанавливаю свою настройку GlobalHost следующим образом этот ответ, чтобы слушать, когда клиент недоступен:
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 в качестве клиента и вызывая метод Stop(), переопределяя метод 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 при остановке активности или закрытом приложении.
Есть ли что-то, что я пропускаю, что не позволяет ему произойти.
UPDATE: Я попытался изменить уровень транспорта на WebSocket, но он не указан в Xamarin SDK для SignalR, как указано в intellisense.