aspnet/signalr: ошибка синтаксического анализа ответа на рукопожатие: TypeError: правая часть «instanceof» не может быть вызвана

Я пытаюсь подключиться к концентратору сигнала R с помощью клиента javascript. Кажется, я могу подключиться, но сразу отключился.

Некоторые журналы:

2020-03-11T11:43:47.974Z] Отладка: Отправка запроса подтверждения. Utils.js:209 [2020-03-11T11:43:47.978Z] Информация: Использование HubProtocol 'json'. home.component.ts:115 Ошибка при установлении соединения с сигналом r. Ошибка: ошибка при разборе ответа на рукопожатие: TypeError: правая часть «instanceof» не может быть вызвана в HubConnection.push../node_modules/@aspnet/signalr/dist/esm. /HubConnection.js.HubConnection.processHandshakeResponse (HubConnection.js:372) в HubConnection.push../node_modules/@aspnet/signalr/dist/esm/HubConnection.js.HubConnection.processIncomingData (HubConnection.js:322) в WebSocketTransport. HubConnection.connection.onreceive (HubConnection.js:65) в WebSocket.webSocket.onmessage [как __zone_symbol__ON_PROPERTYmessage] (WebSocketTransport.js:107) в WebSocket.wrapFn (zone-evergreen.js:1191) в ZoneDelegate.invokeTask (zone-evergreen .js:391) в Object.onInvokeTask (core.js:30885) в ZoneDelegate.invokeTask (zone-evergreen.js:390) в Zone.runTask (zone-evergreen.js:168) в ZoneTask.invokeTask [как вызов] (зона-evergreen.js:465)

Изображение с ошибкой

Я получаю указанную выше ошибку при подключении к концентратору SinalR. Ниже приведен код моего клиента:

this.hubConnection = new HubConnectionBuilder()
  .withUrl('http://localhost:5000/signalr', {
    accessTokenFactory: () => localStorage.getItem('token')
  })
  .configureLogging(LogLevel.Debug)
  .build();

this.hubConnection
  .start()
  .then( () => console.log(this.hubConnection.state))
  .catch( error => console.log('Error establishing connection to signal r ', error));

 this.hubConnection.on('TotalTrucks', trucks => {
  console.log('HERE = ', trucks);
  this.tucks = trucks;
});

Обратите внимание, что у меня есть фоновая служба, которая отправляет сообщения всем подключенным клиентам каждую минуту:

public class OtcWorker : BackgroundService
{
    private readonly IHubContext<OtcHub> _hubContext;
    private IServiceScopeFactory ServiceScopeFactory { get; set; }

    public OtcWorker(IHubContext<OtcHub> hubContext, IServiceScopeFactory serviceScopeFactory)
    {
        _hubContext = hubContext;
        ServiceScopeFactory = serviceScopeFactory;

    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        using (var scope = ServiceScopeFactory.CreateScope())
        {
            var services = scope.ServiceProvider;
            var context = services.GetRequiredService<WeighbridgeDataContext>();

            while (!stoppingToken.IsCancellationRequested)
            {
                var result = await context.ReceiptTransactions.ToListAsync();

                await _hubContext.Clients.All.SendAsync("TotalTrucks", result.Count);

                await Task.Delay(3600, stoppingToken);
            }
        }
    }
}

person abdul.badru    schedule 11.03.2020    source источник
comment
Какой клиентский пакет SignalR вы используете?   -  person Kiril1512    schedule 11.03.2020
comment
Я использую @aspnet/signalr из NPM   -  person abdul.badru    schedule 11.03.2020
comment
Этот пакет устарел. Попробуйте с @microsoft/signalr. docs.microsoft.com/en-us/aspnet/core/signalr/   -  person Kiril1512    schedule 11.03.2020
comment
Даже с @microsoft/signalr выдает ту же самую ошибку.   -  person abdul.badru    schedule 11.03.2020
comment
Вы можете посмотреть эту демонстрацию SignalR, в которой реализован рабочий процесс, который также отправляет данные всем клиентам. github.com/Kiril1512/SignalRDemo   -  person Kiril1512    schedule 11.03.2020
comment
@Kiril1512, у меня такая же проблема. Я просмотрел вашу демонстрацию SignalR, но у вас используется пакет aspnet, а не последний (Microsoft).   -  person Andrei Petrut    schedule 02.07.2020
comment
Вам просто нужно изменить import * as signalR from "@aspnet/signalr"; на import * as signalR from "@microsoft/signalr"; и установить пакет через npm.   -  person Kiril1512    schedule 02.07.2020
comment
@AndreiPetrut только что обновил мой код Github, чтобы использовать новый пакет.   -  person Kiril1512    schedule 02.07.2020
comment
@abdul.badru, можете ли вы поделиться кодом для вашего хаба и запуска сервера?   -  person Kiril1512    schedule 02.07.2020


Ответы (1)


У вас случайно нет полифилла, похожего на var Buffer = Buffer || [];? Если это так, удалите эту строку кода.

Если в вашем index.html есть <script>, который содержит var Buffer = Buffer || [];, удалите эту строку кода. это вызывает ошибку рукопожатия с SignalR

person Peter Verver    schedule 22.11.2020