核心2.1 SignalR成功连接但客户端为空。

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

在浏览器日志中:

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

在我的Hub中

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");
  });

在Ionic中

 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方法时,会出现空异常。

我在这里漏了什么愚蠢的东西吗? 感谢任何帮助!

1个回答

6

我面临着同样的问题。我将IHubContext注入到我的hub类中,以便为服务器端调用客户端方法。

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));
    }

    }

10
你是如何注入IHubContext的? - Pætur Magnussen

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