私はクライアントが到達不能であるとき聞くことがthis answerに従うことによって、このように私のGlobalHost設定を設定しています:(不名誉)誤って切断されたクライアントでSignalRをサーバに通知
が方法をOnDisconnectedをオーバーライドGlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(50);
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);
と私のHUBクラスクライアントが切断されていることを設定する
public override Task OnDisconnected(bool stopCalled) {
/*My code for saving the information of disconnecting*/
return base.OnDisconnected(stopCalled);
}
私はクライアントとしてアンドロイドためXamarinを使用して停止()のように、OnStop()私の活動のメソッドをオーバーライドすることによりメソッド呼び出しています210 :
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では提供されていません。
SignalRサーバーへの接続にはどのトランスポートを使用しますか? 'hubConnection.Start(new 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ソケットに重大な問題があります。だからこれをチェックしようとする。 –