【问题标题】:When calling SignalR Core Hub method from Controller the angular client is not receiving data从控制器调用 SignalR Core Hub 方法时,角度客户端未接收数据
【发布时间】:2021-06-24 01:41:06
【问题描述】:

当从控制器调用 SignalR 核心集线器方法时,Angular SignalR 客户端没有从 asp.net 接收数据,但是当我从 localhost 测试它时它可以工作

我有一个带有 asp.net 后端的 Angular 网站。我将 SignalR 用于实时数据服务。我在localhost 中进行了调试和测试,它运行良好,角度客户端接收到数据。但是当我published API 时,角度客户端没有收到任何数据。

MyHub.cs

using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Biz1PosApi.Hubs
{
    public class MyHub: Hub<IHubClient>
    {
        public void Announce(string message)
        {
            Clients.All.Announce(message);
        }
        public async Task joinroom(string room)
        {
            await Groups.AddToGroupAsync(Context.ConnectionId, room);
            await Clients.Group(room).JoinMessage($"{Context.ConnectionId} joined {room}");
        }
    }
}

IHubClient.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Biz1PosApi.Hubs
{
    public interface IHubClient
    {
        Task Announce(string message);
        Task NewOrder(string platform, int UPOrderId);
        Task OrderUpdate(int UPOrderId);
        Task JoinMessage(string message);
    }
}

ValuesController.cs

 public ValuesController(IHubContext<UrbanPiperHub, IHubClient> uhubContext)
 {
    _uhubContext = uhubContext;
    ...
 }

 [HttpPost("test")]
 public void test(string message)
 {
    _uhubContext.Clients.All.Announce(message);
 }

Angular 客户端

    this.connection = new signalR.HubConnectionBuilder()
          .configureLogging(signalR.LogLevel.Information)
          .withUrl('https://<My-Public-Domain>/uphub')
          .withAutomaticReconnect([0, 1000, 5000, 10000])
          .build();

    this.connection.start().then(() => {
      console.log('SignalR Connected!');
    }).catch((err: { toString: () => any; }) => {
      return console.error(err.toString());
    });
    this.connection.on("Announce", (msg: any) => {
      console.log(msg)
    });

我看过很多工作教程,他们以同样的方式做,但它不适合我。发布 API 时,角度客户端无法正常工作。我一直在测试localhost 中的角度运行。会不会是个问题。

【问题讨论】:

    标签: c# angular signalr asp.net-core-signalr


    【解决方案1】:

    我在 localhost 中调试和测试它工作正常,并且角度客户端接收到数据。但是当我发布 API 时,角度客户端没有收到任何数据。

    请检查您是否启用了 CORS 以允许 Angular 客户端连接到您的 SignalR 应用。

    https://docs.microsoft.com/en-us/aspnet/core/signalr/security?view=aspnetcore-5.0#cross-origin-resource-sharing

    请仔细检查指定的 URL 并确保您的 Angular 客户端连接到正确的端点。

    此外,您可以在浏览器控制台选项卡中检查它是否输出任何有关连接的有用日志,并参考以下文档来解决问题。

    https://docs.microsoft.com/en-us/aspnet/core/signalr/troubleshoot?view=aspnetcore-5.0

    【讨论】:

    • 感谢您的回答。但是角度客户端连接并接收来自信号集线器的消息。但是当从控制器调用集线器方法时,角度客户端没有接收到它。
    • when the hub method is called from controller the angular client is not receiving it. API 操作是否执行良好并返回正确的响应状态码?此外,如果 Angular 客户端调用相同的 hub 方法,它是否也能按预期工作?
    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2023-03-19
    • 2018-04-04
    • 2018-04-30
    • 1970-01-01
    • 2018-10-26
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多