Метод концентратора от клиента не вызывается в ASP.NET Core SignalR

Я добавляю SignalR в свое приложение. Я могу отправлять сообщения с сервера клиенту, но не могу вызывать методы концентратора с клиента. Вот мой интерфейс хаба:

public interface IGeneralHub
{
    Task BroadcastMessage(HubMessage msg); //string type, string payload);
    Task JoinHub(List<int> ids);
}

и клиент хаба:

public class AuctionHub : Hub<IGeneralHub>
{
    public void Broadcast(HubMessage msg)
    {
        Clients.All.BroadcastMessage(msg);
    }
    public void JoinHub(List<int> ids)
    {
        foreach (var id in ids.Distinct())
            Groups.AddToGroupAsync(Context.ConnectionId, id.ToString());
    }
}

И на стороне клиента:

this.hubConnections = new signalR.HubConnectionBuilder()
                    .withUrl(`${environment.hubHost}/document/`)
                    .build();

this.hubConnections.start()
                    .then(() => console.log('Connection started'))
                    .catch(err => console.log('Error while starting connection: ' + err));

this.hubConnections.invoke('joinGroup', JSON.parse(localStorage.getItem('ws-document')));

Я получаю сообщения, но joinGroup никогда не звонит. Что я делаю неправильно?


person Jamil    schedule 11.02.2019    source источник


Ответы (1)


Я получаю сообщения, но joinGroup никогда не вызывается. Что я делаю неправильно?

Это потому, что в вашем AuctionHub классе нет метода JoinGroup. Вместо этого он должен JoinHub выглядеть следующим образом:

this.hubConnections.invoke('joinHub', JSON.parse(localStorage.getItem('ws-document')));
person TanvirArjel    schedule 11.02.2019
comment
правда. Я изменил имя метода и поставил там точку останова, но он все еще не вызывается. Кроме того, по какой-то причине после того, как пользователь подключается к концентратору, приложение зависает и не отправляет никаких ответов, все запросы со стороны клиента помечаются как ожидающие - person Jamil; 11.02.2019
comment
@Jamil Конечно, есть проблема с настройкой! Не могли бы вы дать удаленный доступ с помощью Team Viewer, пожалуйста! - person TanvirArjel; 11.02.2019
comment
@Jamil вопрос, как вы называете эту линию this.hubConnections.invoke('joinGroup', JSON.parse(localStorage.getItem('ws-document'))); - person TanvirArjel; 11.02.2019
comment
Спасибо за ваши усилия, но я не думаю, что это возможно (что не так с этой строкой? Этот метод должен добавлять пользователя в группы, имена групп - это идентификаторы, которые хранятся в localStorage ['ws-document'] - person Jamil; 11.02.2019
comment
Хорошо! но вы должны вызвать этот метод с чем-то вроде события нажатия кнопки и т. д., иначе как он будет вызываться? - person TanvirArjel; 11.02.2019
comment
Он должен вызываться один раз после подключения пользователя к хабу. - person Jamil; 11.02.2019
comment
Это означает, что когда ваш документ будет готов, он будет вызван автоматически? Кроме того, добавьте в вопрос свой полный код на стороне клиента внутри тега script. - person TanvirArjel; 11.02.2019
comment
Нет, после авторизации пользователь получает список связанных с ним идентификаторов документов, он подключается к хабу и вызывает этот метод один раз, мне он нужен только после первоначального подключения. Это почти весь клиентский код, который я удалил в ('BroadcastMessage') и объявлении hubConnection. - person Jamil; 11.02.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person TanvirArjel; 11.02.2019