我已经在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 事件未被触发?
任何帮助表示感谢。