每当我的应用程序被重置时,signalR会断开连接但不会重新连接。SignalR断开连接并且不会重新连接
我有一个长时间运行的服务器任务,在每个任务完成时向客户端发送更新。
上述代码时停止应用程序被复位发送更新(ⅰ可以模拟通过触摸的web.config这个问题)。
我想重新连接到客户端的方式。目前用户必须重新加载页面以便再次获取更新。
这里是我的枢纽定义
public class ForceHub : Hub
{
public void MessageSent(string text)
{
GetContext().Clients.All.sent(text);
}
public void UpdateStatus(string msg)
{
GetContext().Clients.All.status(msg);
}
IHubContext GetContext()
{
return GlobalHost.ConnectionManager.GetHubContext<ForceHub>();
}
public override Task OnConnected()
{
try {
IoC.Resolve<ILogger>().Info("SignalR Connected -----------");
}catch (Exception){}
return base.OnConnected();
}
public override Task OnDisconnected()
{
try {
IoC.Resolve<ILogger>().Info("SignalR Disconnected -----------");
}
catch (Exception) { }
return base.OnDisconnected();
}
public override Task OnReconnected()
{
try {
IoC.Resolve<ILogger>().Info("SignalR Re-Connected -----------");
}
catch (Exception) { }
return base.OnReconnected();
}
}
我可以看到连接和重新接活动启动后触发,但是触摸web.config文件之后,我看不到任何这些事件触发。
我试图在客户端上赶上这一点,但这一事件不会tirggered:
$.connection.hub.disconnected(function() {
console.error('signalR disconnected, retrying connection');
logError('Signal lost.');
setTimeout(function() { connection.start(); }, 1000);
});
更新
我也钩入状态改变事件,该事件被触发,但再下面的连接尝试不起作用。
$.connection.hub.stateChanged(function (state) {
console.debug('signalR state changed', state);
if (state.newState == 1) {
console.debug('restarting');
setTimeout(function() { $.connection.hub.start(); }, 1000);
}
});
此事件被触发两次:newState是2,然后1
它看起来像一个有趣的案例,我想摄制它,但我不能。我没有尝试长时间运行的任务,但有一个简单的附加页面,其代码在用GET命中时向所有客户端发送消息。这模拟了一个“带外”工作,即使在应用程序重置后,它也能正常工作,客户端得到正常通知。我会说SignalR不会失去连接(这就是为什么你没有看到事件)......也许问题在别的地方? – Wasp
@Wasp是否尝试修改web.config? –
当然,我是这样做的请求之间我的“工作”页面 – Wasp