core3.1 控制器中的 SignalR 上下文 - 无 context.clients

SignalR context within core3.1 controller - no context.clients

我正在尝试从控制器调用 SignalR 集线器操作。

在我的控制器上我有这个:

    private readonly IHubContext<TurnHub> _hubContext;

    public HomeController(ILogger<HomeController> logger, IHubContext<TurnHub> hubContext)
    {
        _logger = logger;
        _hubContext = hubContext;
        _gameService = new GameService(ModelState);
    }

    public async Task<IActionResult> Test()
    {
        return View();
    }

    public async Task<IActionResult> TestMessage()
    {
        await _hubContext.Clients.All.SendAsync("TurnChanged", 1);
        return View();
    }

当我中断中心上下文时,我可以看到“客户端”和“组”的节点,但该级别下没有客户端或组。 运行 控制器操作未发现任何错误,但消息未推送到客户端。

在集线器上我有这个:

public class TurnHub : Hub
{

    public async Task EndTurn(int nextUser)
    {
        await Clients.All.SendAsync("TurnChanged", nextUser);
    }
}

视图是这样的:

<script>
    var connection = new signalR.HubConnectionBuilder().withUrl("/TurnHub").build();
    connection.on("TurnChanged", function (nextUser) {
        debugger;
        alert(nextUser);
    });
</script>

我期待任何显示该视图的浏览器 window 在其中一个客户端点击该控制器操作(从该视图上的按钮调用)时发出警报。

我做错了什么?

我安装了 signalr 核心包,js 文件来自“添加客户端库”@microsoft/signalr。浏览器上没有控制台报错说有什么不对!

非常感谢任何帮助。

在您的 javascript 客户端中,您需要启动集线器连接。像这样

connection.start();

一开始会 return 一个承诺,这样您就可以在连接集线器后做一些事情。也可以通过捕获该承诺的错误来跟踪连接失败。