c# - 核心 2.1 signalR 成功连接但客户端为空

标签 c# signalr ionic3

我正在尝试在新的 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);
}

在 Controller 中

    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 方法时,它会得到一个 null 异常。

我是不是漏掉了什么蠢东西? 感谢您的帮助!

最佳答案

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

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

    }

关于c# - 核心 2.1 signalR 成功连接但客户端为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50006534/

相关文章:

c# - ASP.NET 核心 : Exclude or include files on publish

c# - 在 MVVM 中打开一个新窗口

c# - "The page cannot be displayed because an internal server error has occurred."“

javascript - 客户端未在 SignalR 2.2 应用程序中接收消息

没有找到 jQuery。请确保在 SignalR 客户端 JavaScript 文件之前引用 jQuery

jquery - 无法读取未定义 SignalR Hub 的属性 'chatHub'

json - 在 *ngfor 上使用对象

c# - 如何创建扩展方法来处理带有谓词输入的 bindinglist.removeall

angular - ionic 找不到模块 '../providers/auth-service/auth-service'

angular - 错误错误 : Uncaught (in promise): invalid link: LoginPage