我設置我的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套接字存在重大問題。所以試着去檢查一下。 –