Angular 6 SignalR выдает "WebSocket не находится в состоянии ОТКРЫТО" при установлении соединения - PullRequest
0 голосов
/ 19 февраля 2019

Я установил @ aspnet / signalr в моем проекте Angular 6

Я перепробовал все другие варианты, найденные в потоке стека, для проблемы с сигнализатором.Ниже приведен мой сервисный код:

import { Injectable } from '@angular/core';
import * as signalR from "@aspnet/signalr";
import { UserService } from 'app/@core/data/users.service';

@Injectable()
export class SignalRService {

  private url = baseurl+'&users='
  public data;

  private hubConnection: signalR.HubConnection;

  constructor(private user: UserService) { }

  public startConnection = () => {
    let loggedInuser = this.user.getUserEmail();
    let accessToken ="some token";
    var options = {
      transport: signalR.HttpTransportType.WebSockets,
      logging: signalR.LogLevel.Trace,
    accessTokenFactory: () => accessToken
  };

    this.hubConnection = new signalR.HubConnectionBuilder()
                            .withUrl(this.url + loggedInuser , options)
                            .build();
    this.hubConnection.serverTimeoutInMilliseconds = 9999999999999;
    this.hubConnection
      .start()
      .then(() => console.log('Connection started'))
      .catch(err => {
        console.log('url: ' + this.url + loggedInuser)
        console.log('Error while starting connection: ', err)
      })
  }

  public addTransferChartDataListener = () => {
    this.hubConnection.on('AppNotifications', (data) => {
      this.data = data;
      console.log(data);
    });
  }
}

Когда я запускаю ngOninit () компонента уведомления, я получаю сообщение «Websocket не находится в открытом состоянии» в консоли.Где это я делаю неправильно?

Пример, которому я следовал, чтобы реализовать это: https://code -maze.com / netcore-signalr-angular /

1 Ответ

0 голосов
/ 20 февраля 2019

Изменен транспорт с 'WebSockets' на 'ServerSentEvents' и перемещен hubConnection.on сразу перед hubConnection.start (). Итак, это мой последний код в рабочем состоянии

import { Injectable } from '@angular/core';
import * as signalR from "@aspnet/signalr";
import { UserService } from 'app/@core/data/users.service';

@Injectable()
export class SignalRService {

    private url = baseurl + '&users='
    public data;

    private hubConnection: signalR.HubConnection;

    constructor(private user: UserService) { }

    public startConnection = () => {
        let loggedInuser = this.user.getUserEmail();
        let accessToken = "some token";
        var options = {
            transport: signalR.HttpTransportType.ServerSentEvents,
            logging: signalR.LogLevel.Trace,
            accessTokenFactory: () => accessToken
        };

        this.hubConnection = new signalR.HubConnectionBuilder()
            .withUrl(this.url + loggedInuser, options)
            .build();
        this.hubConnection.serverTimeoutInMilliseconds = 9999999999999;
        this.hubConnection.on('AppNotifications', (data: string) => {
            this.data = data;
            console.log('AppNotifications data');
            console.log(data);
        });

        this.hubConnection
            .start()
            .then(() => console.log('Connection started'))
            .catch(err => {
                console.log('Error while starting connection: ', err)
            })
    }

    public addTransferChartDataListener = () => {
        // this.hubConnection.on('AppNotifications', (data) => {
        //     this.data = data;
        //     console.log(data);
        // });
    }
}
...