Signalr 信号机Silverlight客户端保留;“已连接”;,当轮毂断开时

Signalr 信号机Silverlight客户端保留;“已连接”;,当轮毂断开时,signalr,signalr-hub,signalr.client,Signalr,Signalr Hub,Signalr.client,我已经在Silverlight 5应用程序中实现了SignalR,只要客户端保持在线,它就可以正常工作。但一旦网络连接中断超过5秒,它就会停止工作,我无法让它重新连接 当客户端失去网络连接时,会触发集线器的事件“OnDisconnected”。 但是在客户端,不会触发HubConnection的Closed或StateChanged事件,并且ConnectionState保持连接状态。然后,它尝试调用hubproxy.Invoke(),但这不会像在网络连接保持活动状态时那样调用客户端方法 我在A

我已经在Silverlight 5应用程序中实现了SignalR,只要客户端保持在线,它就可以正常工作。但一旦网络连接中断超过5秒,它就会停止工作,我无法让它重新连接

当客户端失去网络连接时,会触发集线器的事件“OnDisconnected”。 但是在客户端,不会触发HubConnection的Closed或StateChanged事件,并且ConnectionState保持连接状态。然后,它尝试调用hubproxy.Invoke(),但这不会像在网络连接保持活动状态时那样调用客户端方法

我在App.xaml.xs中实例化signalr客户端:

private void Application_UserLoaded(LoadUserOperation operation)
{
 //Some checks whether user is logged in
  _signalRClient = new SignalRClient();
  _signalRClient.RunAsync();
}

正如文档所示,我试图通过处理客户端关闭事件和启动连接来实现自动重新连接。 但是由于ConnectionState仍然是“已连接”,因此不会触发此事件,并且我看不到从客户端重新启动连接的方法。 客户端的hubconnection的Connectionstate属性未更改为“Disconnected”的原因是什么?为什么未触发Closed事件


非常感谢您的帮助。

我在使用.net SignalR客户端时也遇到了这个问题-我的closed()事件永远不会触发。你学到什么新东西了吗?不幸的是没有。如果ConnectionState属性发生变化,您可以定期检查该属性。但是因为它也保持“连接”,所以我首先用一个单独的调用调用hubproxy,只是为了验证连接。如果调用了这个方法,我会在SignalR客户端的一个成员中存储一个DateTime,这样我就可以将那个时刻与实际时刻进行比较。如果存储的时间太长,我会手动停止并启动轮毂连接。
public class SignalRClient
{
  public async void RunAsync()
  {
    SetHubConnection();

    SetHubProxy();

    await StartHubConnection();

    SendTestSignal();
  }

  private void SetHubConnection()
  {
  try
  {
    _hubConnection = new HubConnection("https://10.1.2.3/HubWeb");
  }
  catch (WebException ex)
  {
    LoggerManager.WriteLog(LogType.ERROR, ex.ToString());
  }

  _hubConnection.Closed += () => TimeoutHelper.SetTimeout(5000, () => _hubConnection.Start());
  _hubConnection.StateChanged += (change) => LoggerManager.WriteLog(LogType.DEBUG, String.Format("SignalR Client:    Connection State Changed from {0} to {1}", change.OldState, change.NewState));

}