C# 通知客户端上的信号服务器意外断开连接(不光彩)
我通过以下方式设置GlobalHost配置,以便在无法访问客户端时进行侦听: 在我的集线器类中重写OnDisconnected方法以设置客户端已断开连接C# 通知客户端上的信号服务器意外断开连接(不光彩),c#,asp.net,signalr,signalr-hub,C#,Asp.net,Signalr,Signalr Hub,我通过以下方式设置GlobalHost配置,以便在无法访问客户端时进行侦听: 在我的集线器类中重写OnDisconnected方法以设置客户端已断开连接 public override Task OnDisconnected(bool stopCalled) { /*My code for saving the information of disconnecting*/ return base.OnDisconnected(stopCalled);
public override Task OnDisconnected(bool stopCalled) {
/*My code for saving the information of disconnecting*/
return base.OnDisconnected(stopCalled);
}
我将Xamarin for android用作客户端,并通过覆盖我活动的OnStop()方法调用Stop()方法,如下所示:
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();
}
其次,我已经编写了一个显式hub方法,在显式通知服务器我的客户端已停止工作时调用它。该方法适用于OnStop事件
我的实际问题是如果
上述所有内容都无法在活动停止或应用程序关闭时调用断开方法
有没有什么是我错过了不让它发生
更新:
我已经尝试将传输级别更改为WebSocket,但在intellisense中提到的Xamarin SDK中没有为SignalR提供。
由于Xamarin不提供WebSocketTransport,我建议使用“Ping”解决方案
Ping()
方法ConnectionId
:DateTime
键/值对保存到服务器端的staticconcurrentdirectionary
DateTime
您使用哪个传输连接到信号服务器?尝试使用类似于
hubConnection.Start(新WebSocketTransport())
的工具会有帮助吗?它使用.NetFramework 4.5我不是说平台。我指的是在客户端指定的传输。请查收作为参考。默认传输是LongPollingTransport,它的工作方式有点出乎意料,正如您所描述的:-)WebSocketTransport应该可以解决您的问题,但我知道在Xamarin中,web套接字存在重大问题。所以试着检查一下,我试着添加传输级别,但XamarinAndroid似乎没有提供websocket。我是否可以尝试服务器发送事件来达到此目的。我已经更新了这个问题?ping非常有效,尤其是在使用一些数据有限的网络时,如涉及的某些层
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();
}