Я заходящий мой GlobalHost конфигурацию, как это, следуя this answer слушать, когда клиент недостижим:Уведомлять SignalR сервер на клиенте Разъединен Accidentally (позор)
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 для андроид в качестве клиента и вызвать 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.
Какой транспорт вы используете для подключения к серверу 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 существуют существенные проблемы с веб-сокетами. Поэтому просто попробуйте проверить это. –