Клиент SignalR Javascript - метод Invoke работает, но обещание не работает (???)

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

      this.hub.invoke(method, data)
      .then((res)=>{ alert(res);})
      .catch(err=> alert(err));
The server method:

    public async Task<IActionResult> joinRoom(string roomId)
    {
        Console.WriteLine(roomId);
        return new OkObjectResult("Ok");
    }

Проблема:

  • Успешный вызов, консоль на стороне сервера записала roomId

  • Однако клиентская сторона Promise.then / Promise.catch не работала.

Когда я закрываю сервер, на стороне клиента возникает несколько ошибок, в которых говорится, что вызов был отменен из-за закрытия соединения.

Моя версия SignalR - 1.0.3

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


person Ryu    schedule 11.10.2018    source источник


Ответы (1)


Вы не можете использовать IActionResults с SignalR, это не HTTP-запрос, это вызов стиля RPC. Просто верните объект, который хотите вернуть, или сделайте возвращаемый тип Task, если вам не нужно ничего возвращать клиенту.

public async Task<string> joinRoom(string roomId)
{
    Console.WriteLine(roomId);
    return "Ok";
}
person davidfowl    schedule 13.10.2018