从SignalR Hub调用方法出现问题。调用失败。Promise被拒绝。

6
我已经为这个问题烦恼了一个多星期,由于我对 .NET 和 angular 的环境还很陌生,所以找不到解决办法。而且,我在网上也找不到适合我的问题的解决方案。
我有一个服务通过 REST API 每秒向我发送数据,我希望在客户端中检索此数据,而不必持续重新加载整个页面。因此,我选择了 SignalR。
到目前为止,一切都正常,并且与 hub 的连接已经建立。但是当我尝试从 hub 调用方法时,我收到一个错误消息:
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();
            }
        }
    }
}

我不明白出了什么问题。有任何想法吗?

Chrome 网络选项卡的响应中没有错误吗? - Poul Kruijt
1个回答

0

我搞定了。代码没有问题。问题是防火墙出于某种原因阻止了服务请求。在它被打开之后,一切正常。

网络选项卡很不幸地没有提供多少线索,我是偶然发现了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接