当Hub断开连接时,SignalR Silverlight客户端保持“连接”状态

时间:2014-02-25 16:44:22

标签: signalr signalr-hub signalr.client

我已经在Silverlight 5应用程序中实现了SignalR,只要客户端保持在线状态,它就能正常工作。但是一旦网络连接下降超过大约5秒,它就会停止运行,我无法重新连接。

当客户端丢失网络连接时,将触发Hub的事件“OnDisconnected”。 但在客户端,HubConnection的已关闭 StateChanged 事件未被触发,ConnectionState仍然已连接。然后它尝试调用hubproxy.Invoke(),但不会像网络连接保持活动状态那样调用客户端方法。

我在App.xaml.xs中实例化信号器客户端:

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

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

}

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

任何帮助表示感谢。

0 个答案:

没有答案