Сервер часто теряет соединение Azure SignalR

Мой проект ASP.NET Web API (целевая среда: .NET Framework 4.6.2) часто теряет связь со службой Azure SignalR (бесплатный уровень). Я следовал примеру, как показано в примере с " aspnet " в чате.

Мое клиентское приложение основано на Angular JS. Сообщения отправляются клиентам, но через несколько часов соединение с сервером со службой Azure SignalR теряется и больше не устанавливается.

Насколько я понимаю из документации MS Azure SignalR Internals:

Если соединение с сервером отключено из-за проблем с сетью,

  • Соединение с сервером начинает переподключаться автоматически.

Следующая ошибка возвращается в ответ:

Служба Azure SignalR еще не подключена, повторите попытку позже.

Однако этого, похоже, не происходит, т. Е. Соединение с сервером со службой Azure SignalR больше не устанавливается.

nuget пакеты:

  • Microsoft.AspNet.SignalR v2.4.0
  • Microsoft.AspNet.SignalR.Core v2.4.0
  • Microsoft.AspNet.SignalR.SystemWeb v2.4.0
  • Microsoft.Azure.SignalR.AspNet v1.0.0-preview1-10317
  • Microsoft.Azure.SignalR.Protocols v1.0.6

2 ответа

Решение

В настоящее время существует проблема с Microsoft.Azure.SignalR.AspNet v1.0.0-preview1-10317, Исправление планируется выпустить на этой неделе.

Вы добавили код обработки ошибок в свой клиент, как показано ниже:

 // Define handlers for any errors
        //
        this.hubConnection.error((error: any) => {
            // Push the error on our subject
            //
            this.hubConnection.start()
                .done(() => {
                    this.startingSubject.next();

                    //Invoke connect method on Hub
                    //  this.hubProxy.invoke("Connect", userId, usertype);

                })
                .fail((error: any) => {
                    this.startingSubject.error(error);
                });
        });

Также в случае закрытого соединения код будет как

this.hubConnection.onclose(() => { 
    setTimeout(function(){
    this.hubConnection.start()
               .done(() => {
                    this.startingSubject.next();

                        //Invoke connect method on Hub
                      //  this.hubProxy.invoke("Connect", userId, usertype);

                   })
                  .fail((error: any) => {
                        this.startingSubject.error(error);
                   });
       },3000); 
   }); 

Надеюсь, поможет.

М.В.

Другие вопросы по тегам