【问题标题】:core 2.1 signalR successfully connecting but client is null核心 2.1 signalR 成功连接但客户端为空
【发布时间】:2026-01-05 17:40:02
【问题描述】:

我正在尝试在新的 dotnet core2.1 中使用 signalR。我已经设置了我的 C# 服务器并准备好作为客户端的 ionic 3 应用程序。我已经在它们之间建立了成功的 websocket 连接。但是,当我尝试使用从服务器到客户端的 SendAsync 时,即使建立了成功的连接,客户端也会显示为 null。
我已经进行了一些测试,甚至尝试使用 OnConnectedAsync 覆盖来查看发生了什么。它确实会触发,但 context.user.identity.name 为空,并且客户端仍然为空。

在浏览器日志中:

Information: WebSocket connected to ws://localhost:xxxx/myHub

在我的中心

public async Task Send(string message)
{
  await Clients.All.SendAsync("SendMessage", message);
}

在控制器中

    public async Task<IActionResult> NewBuild()
{
  await myHub.Send("New Build Completed.");
  return Ok();
}

在我的创业公司

services.AddCors(options => options.AddPolicy("CorsPolicy",
        builder =>
        {
          builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials();
        }));

  services.AddSignalR();

app.UseCors("CorsPolicy");

  app.UseSignalR(routes =>
  {
    routes.MapHub<myHub>("myHub");
  });

在离子中

 hubConnection: HubConnection;
this.hubConnection =  new HubConnection('http://localhost:xxxx/myHub', {
  transport: TransportType.WebSockets
});
this.hubConnection.on("SendMessage", () => {
  this.InitTodayBuilds();
});

this.hubConnection.start().catch(() => console.error);

正如我所说,它似乎连接得很好。但是当 Send 方法被调用时,它会得到一个空异常。

我在这里错过了什么愚蠢的东西吗? 任何帮助表示赞赏!

【问题讨论】:

    标签: c# signalr ionic3


    【解决方案1】:

    我也遇到了同样的问题。我将 IHubContext 注入到我的集线器类中以调用服务器端的客户端方法。

    public class ChangeRequest: Hub, ITransientDependency
    {
        public IAbpSession AbpSession { get; set; }
        protected IHubContext<ChangeRequest> _context;
        public ILogger Logger { get; set; }
    
        public ChangeRequest(IHubContext<ChangeRequest> context)
        {
            AbpSession = NullAbpSession.Instance;
            Logger = NullLogger.Instance;
            _context = context;
        }
    
        public async Task SendMessage(string message)
        {
            await _context.Clients.All.SendAsync("getMessage", string.Format("User {0}: {1}", AbpSession.UserId, message));
        }
    
        }
    

    【讨论】:

    • 你是如何注入 IHubContext 的?
    最近更新 更多