Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通知客户端上的信号服务器意外断开连接(不光彩)_C#_Asp.net_Signalr_Signalr Hub - Fatal编程技术网

C# 通知客户端上的信号服务器意外断开连接(不光彩)

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);

我通过以下方式设置GlobalHost配置,以便在无法访问客户端时进行侦听:

在我的集线器类中重写OnDisconnected方法以设置客户端已断开连接

 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()
    方法
  • 定期从客户端调用此方法(例如超时间隔的1/2)
  • 在此方法中,将
    ConnectionId
    DateTime
    键/值对保存到服务器端的static
    concurrentdirectionary
  • 在服务器端运行后台任务,并检查所有字典键的
    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();
            }