Как определить новую бэкэнд-версию с помощью SignalR и .NET Core 2 - PullRequest
0 голосов
/ 25 апреля 2019

РЕДАКТИРОВАТЬ: После ожидания в неделю, я сдался и реализовал setInterval, который каждую минуту отправлял внутреннее событие, которое заставляло SignalR делать вызов серверу, выбирающему текущую версию.

Мы хотели бы представить пользователям тостер, сообщая им, что им необходимо обновить сайт, чтобы получить самую последнюю версию SPA.

При развертывании новой версии бэкэнда SPA внешнего интерфейса не знает, что существует более новая, лучшая версия. Поскольку это SPA, пользователь обычно не будет перезагружать страницу через много дней.

Мы попытались прослушать события подключения и отключения в сигнальном концентраторе.

Но поскольку обычное развертывание не перезапускает пул приложений, соединения SignalR остаются открытыми, не вызывая события SignalRs.

Когда запускается новый бэкэнд, у него не будет списка клиентов? Так я не могу проинформировать клиентов о запуске? Я не пробовал это, потому что я не думал, что это правдоподобный маршрут. Это 1011 *

Fronend: Vue с сигналомR Серверная часть: ASP .NET Core 2.2 Сервер: IIS с развертыванием Octopus для развертывания.

В моем Хабе:

public override async Task OnConnectedAsync()
{
   var assemblyVersion = GetType().Assembly.GetName().Version.ToString();
   await Clients.All.SendAsync("currentVersion", assemblyVersion);

   await base.OnConnectedAsync();
}

и использование $ signalR.HubConnectionBuilder во внешнем интерфейсе:

this.connection.on('currentVersion', version => this.checkVersion(version))

Это работает как очарование локально при запуске DotNet Watch, но не работает с развертыванием без рециркуляции iis.

а рекомендации? Отправляете версию на все запросы? Кажется излишним и код тяжелым.

Мы не хотели, чтобы опросчик запрашивал новую версию каждую n-минуту. Хотелось бы использовать существующее соединение SignalR!

...