SignalR после обновления страницы не работает должным образом - PullRequest
0 голосов
/ 01 мая 2018

Я использую SignalR на своем веб-сайте angular5 для представления блокировки документов. Я храню хаб-соединение в службе данных, и вскоре пользователь войдет в систему, и я начну соединение. В каждом компоненте, который мне нужен для подключения к концентратору, у меня есть Observable, и после установления соединения он прослушивает концентратор. Все работает правильно. Но после обновления страницы она не покажет результат команды SignalR. Если я нажму или наведу указатель мыши на эту страницу, она покажет результат SignalR!

Это код, который запускается после входа в систему:

startConnection(): void {
//Create the hub connection for SignalR
this.dataService.connection = $.hubConnection(this.dataService.getServerConn());
this.dataService.authProxy = this.dataService.connection.createHubProxy('auth');
this.dataService.authProxy.on('handler', () => { });
this.dataService.authProxyCreated = false;
this.dataService.connection.qs = { "AuthenticationToken": sessionStorage.getItem('UMToken') };
if (this.dataService.connection.state != $.signalR.connectionState.connected)
  this.dataService.connection.start().done(() => {
    console.log('Connected to SignalR hub!');
  }).catch((error: any) => {
    console.log('Hub error -> ' + error);
  });
}

и это код в компоненте, который слушает хаб:

ngOnInit() {

//SignalR
if (this.storeDataService.connection.state === $.signalR.connectionState.connected)
  this.registerSignalR();
this.storeDataService.connection.stateChanged((change) => {
  if (change.newState === $.signalR.connectionState.connected)
    this.registerSignalR();
});
}
ngOnDestroy() {
this.storeDataService.authProxy.off('lockAuth');
this.storeDataService.authProxy.off('unlockAuth');
}

registerSignalR() {
this.storeDataService.authProxy.on('lockAuth', (authNo: string, username: string) => {
  var auth = this.queueList.data.find(p => p.AuthNo == authNo);
  if (auth) {
    auth.LockedOn = new Date();
    auth.LockedByUserName = username;
  }
});
this.storeDataService.authProxy.on('unlockAuth', (authNo: string) => {
  var auth = this.queueList.data.find(p => p.AuthNo == authNo);
  if (auth) {
    auth.RmiLockedOn = null;
  }
});
}

Это также код на странице редактирования, который вызывает блокировку:

if (this.dataService.connection.state === $.signalR.connectionState.connected) {
    this.dataService.authProxy.invoke('lock', this.authNo, this.userService.userName, this.userService.userId);
  }
  this.dataService.connection.stateChanged((change) => {
    if (change.newState === $.signalR.connectionState.connected) {
      this.dataService.authProxy.invoke('lock', this.authNo, this.userService.userName, this.userService.userId);
    }
  });
...