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