2015-09-01 8 views
0

Я создал небольшой модуль для веб-сайта, который использует SignalR, чтобы определить, нужно ли пользователю обновлять браузер. Локально это работает, но когда код вошел в производство, тысячи ошибок производятся:SignalR генерирует много ошибок 403

  • запрос: (много страниц с сайта)
  • реферер: https://(website)/signalr/abort
  • сообщения об ошибке: 403: Ошибка HTTP 403
  • сторона

Сервер: (каталог MainProject/концентраторы):

public class AppVersionNotifierHub : Hub<IAppVersionNotifierHub> 
{ 
    public void CheckAppVersion(string version) 
    { 
     // if client has diffrent version, invoke callback 
     if (Global.Version != version) 
     { 
      Clients.Caller.NewAppVersion(Global.Version); 
     } 
    } 
} 

Javascript (тип s cript):

this.subscribeVersionChecker =() => { 
    var hub = (<any>$.connection).appVersionNotifierHub; 

    hub.client.newAppVersion = (version: string) => { 
     .. some logic 
    } 

    $.connection.hub.start(() => { 
      hub.server.checkAppVersion(customerVersion.text()); 
    }); 

    $.connection.hub.reconnected(() => { 
     setTimeout(() => { 
      hub.server.checkAppVersion(customerVersion.text()); 
     }, 5000); // Restart connection after 5 seconds. 
    }); 

    $.connection.hub.disconnected(() => { 
     setTimeout(() => { 
      $.connection.hub.start(); 
     }, 10000); // Restart connection after 10 seconds. 
    }); 
}; 

Любые идеи, почему некоторые клиенты генерируют ошибки?

  • Сайт размещен на лазурном
  • Чтобы использовать пакеты, я скопировал динамически генерируемые signalr.js файл в Scripts \ signalrhub.js файл
+0

Может быть связано с этим: http://stackoverflow.com/questions/16859771/signalr-hubs-not-found-403 – blas3nik

+0

@ blas3nik Я не думаю, что это так, поскольку лишь немногие клиенты имеют проблемы , –

+0

@ tomasz.salieri это может быть версия браузера (например, мобильная) –

ответ

4

Я обнаружил проблему сейчас. Проблема была с проверкой подлинности, я прочитал эту статью: http://www.bitwisejourneys.com/signalr-authenticating-even-when-you-dont-think-it-is/ и после некоторого размышления я смог воспроизвести проблему.

  1. Открыть сайт в одной вкладке и войти в
  2. Открыть сайт на вкладке другой и выйти
  3. Перезапустите соединение на сервере
  4. Tab 1 посылает тот же маркер аутентификации, как Tab 2. Сервер отрицает Tab 1, но реагирует на Tab 2

Мое решение: когда соединение потеряно, я не пытаюсь восстановить, но остановить и перезапустить соединение (обратите внимание, я изменил событие от Reconnected к Reconnecting!)

$.connection.hub.reconnecting(() => { 
      $.connection.hub.stop(); 
      setTimeout(() => { 
      $.connection.hub.start(); 
      }, 5000); // Restart connection after 5 seconds. 
    }); 
Смежные вопросы