首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SignalR无法向所有连接的客户端发送消息

SignalR无法向所有连接的客户端发送消息
EN

Stack Overflow用户
提问于 2018-04-18 09:23:36
回答 1查看 975关注 0票数 3

我正在尝试使用SignalR向所有连接的客户端发送消息。

我已经找到了几个例子,并添加了我认为是所有必需的部分。我确实成功地让我的客户端连接到了我的集线器。我无法让我的服务器连接到我的集线器并向所有连接的客户端发送消息。

当我调用DatabaseChangeListener::Notify()时,它从未命中Hub中的代码。

有没有人能建议我还需要做什么?

我在React和Redux的web应用程序中使用.NET Core2.1预览版2。

我正在使用SignalR 1.0.0-预览版2-最终版

我正在使用SignalR.Client 1.0.0-预览版2-最终版

在Startup.cs中

代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services)
    {
      // remove all other code for this question
      services.AddSignalR();
    }

    public void Configure(IApplicationBuilder app)
    {
      // remove all other code for this question
      app.UseSignalR(routes =>
      {
        routes.MapHub<SignalRHub>("/hubs/update");
      });
    }

我的中心

代码语言:javascript
复制
    [Authorize]
    public class SignalRHub : Hub
    {
        public async Task Send(string message)
        {
            await Clients.All.SendAsync("SendMessage", Context.User.Identity.Name, message);
        }   
    }

通知客户端的类

代码语言:javascript
复制
public class DatabaseChangeListener : IDatabaseChangeListener
{
    private readonly IHubContext<SignalRHub> _hubContext;

    public DatabaseChangeListener(IHubContext<SignalRHub> hubContext)
    {
            _hubContext = hubContext;

    }

    public void Notify()
    {
      _hubContext.Clients.All.SendAsync("SendMessage", "something changed, Yo");
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-13 07:23:20

您需要通过客户端建立到集线器的连接,然后通过使用_hubContext,您应该能够根据与集线器建立的连接向客户端发送消息。

使用JS从客户端连接到集线器。

代码语言:javascript
复制
    const connection = new signalR.HubConnectionBuilder()
        .withURL("/YourHub")
        .build();

然后,在建立连接之后,您还可以使用JS创建从服务器向客户端发送消息的方法。

代码语言:javascript
复制
    connection.on("SendMessage", message => {
        document.getElementById("IdOfElementToDisplayMessage").innerHTML = message;
    });

最后添加:

代码语言:javascript
复制
    connection.start().catch(err => console.error(err.toString()));

现在,您已经通过客户端建立了到集线器的连接,现在可以从IHubContext引用到集线器的连接。要将消息从服务器发送到客户端,您可以使用_hubContext

在本例中,您可以调用Notify(),然后调用await _hubContext.Clients.All.SendAsync("SendMessage", "something changed, Yo");,这将把您的消息发送到在JS:connection.on("SendMessage", message => { ...中创建的SendMessage方法

如果您的_hubContext变量在执行期间为null,则需要检查IHubContext的注入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49889722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档