Проблема с вызовом метода из SignalR Hub.Вызвать не удалось.Обещание отклонено - PullRequest
0 голосов
/ 24 октября 2018

Я цепляюсь за проблему уже более недели и не могу найти способ ее исправить, потому что я довольно плохо знаком с .NET и угловой средой.Кроме того, я не могу найти в Интернете решение, которое бы соответствовало моей проблеме.

У меня есть служба, которая отправляет мне данные каждую секунду через API REST.Я хотел бы получить эти данные в клиенте без необходимости постоянно перезагружать всю страницу.Поэтому я выбрал SignalR.

Пока все работает, и соединение с концентратором установлено.Но когда я пытаюсь вызвать метод из концентратора, я получаю сообщение об ошибке:

Invoking 'GetPerformanceSnapshotData' failed.  Rejecting promise... 
Promise rejected.

ErrorObservable {_isScalar: false, error: Error: An error occurred while sending the request.
    at Object.error (http://localhost:4200/scrip......, scheduler: undefined}
error: Error. An error occurred while sending the request: An error occurred while sending the request. at Object.error (http://localhost:4200/...)...

Это мой метод вызова на клиенте:

public GetPerformanceSnapshotData() {
    this.connect().then((connection) => {
      this.invoke("GetPerformanceSnapshotData").then((data: string) => {
        console.log(data);
      }).catch(error => {
        this.dialogService.showError(error);
        return Observable.throw(error);
      });
    }).catch(error => {
      this.dialogService.showError(error);
      return Observable.throw(error);
    });
  }
}

Метод на стороне сервера выглядит следующим образом:

namespace ...
{
    using System.Threading.Tasks;
    using System.Net.Http;
    using Microsoft.AspNet.SignalR;

    public class PerformanceSnapshotHub : Hub
    {
        public async Task<string> GetPerformanceSnapshotData()
        {
            using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true }))
            {
                var response = await client.GetAsync("http://localhost:8080/api/PerformanceSnapshot");
                response.EnsureSuccessStatusCode();
                return await response.Content.ReadAsStringAsync();
            }
        }
    }
}

Я не понимаю, в чем дело.Есть идеи?

1 Ответ

0 голосов
/ 26 ноября 2018

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

Вкладка «Сеть», к сожалению, не очень показательна, я случайно наткнулся на эту проблему.

...