Когда мое приложение сбрасывается, signalR отключается, но не восстанавливается.SignalR отключает и не подключается
У меня есть многолетняя задача сервера, которая отправляет обновления клиентам, когда каждая задача будет завершена.
// inside action executed on every completion of a task
var h = new ForceHub();
h.MessageSent(email);
выше коды прекращает отправку уведомлений, когда применение получает сброс (я могу эмулировать эту проблему путем прикосновения 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();
}
}
Я могу видеть Connected и Connected Re- событий запускается после запуска, однако после касания web.config, я не вижу какой-либо из этих событий, запускаемых ,
я пытался поймать это на клиенте, но это событие не tirggered:
$.connection.hub.disconnected(function() {
console.error('signalR disconnected, retrying connection');
logError('Signal lost.');
setTimeout(function() { connection.start(); }, 1000);
});
обновление
я зацепил в Государственный Changed событие, которое действительно становится срабатывает, но в ПЕРЕУСТАНОВКИ попытка подключения ниже не работает.
$.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? –
Несомненно, я делал это между запросами на мою страницу «job» – Wasp