【问题标题】:SignalR: Messages sent outside hub are not received on clientSignalR:客户端未收到在集线器外部发送的消息
【发布时间】:2021-01-23 18:53:15
【问题描述】:

我可以从集线器内部的 SignalR 集线器发送消息,但不能从集线器外部发送消息。 以下代码不起作用:

public class MessageSender
{
    private readonly ILogger<MessageSender> _logger;
    private readonly IHubContext<MessageHub> _context;

    public MessageSender(ILogger<MessageSender> logger, IHubContext<MessageHub> context)
    {
        _logger = logger;
        _context = context;
    }

    public async Task SendTestMessage()
    {
         Console.WriteLine("Sending Test Message to Client");
         await _context.Clients.All.SendAsync("TestMessageReceived", new SampleData());
    }
}

但是下面的代码可以工作:

public class MessageHub : Hub
{ 
    public async Task InitiateConnection(SampleData data)
    {
        Console.WriteLine($"{data.Text});
        await Clients.All.SendAsync("TestMessageReceived", new SampleData());
    }
}

我的客户端应用程序 (C#) 能够与服务器通信并调用集线器中的“InitiateConnection”方法,该方法反过来调用客户端的“TestMessageReceived”方法,该方法工作正常。

为什么 MessageSender 无法发送消息?可能我错过了一些非常小的东西。 我正在使用 .Net Core,服务器和客户端都在 .Net 5 上

【问题讨论】:

    标签: .net signalr signalr-hub signalr.client


    【解决方案1】:

    我已经解决了这个问题,对于遇到同样问题的人来说,这是我的问题所在。

    我在 Windows 服务中运行的红隼服务器上托管 SignalR,但我创建了两个依赖注入容器,一个供 Windows 服务执行此操作 services.AddHostedService&lt;Worker&gt;(); 另一个用于在红隼上运行 Web 服务器并像这样托管 SignalR

    webHostBuilder.Configure((context, app) =>
    {
        app.UseRouting();
        app.UseCors();
        app.UseMvc();
        app.UseEndpoints(endpoints => { endpoints.MapHub<MessageHub>("/myendpoint"); });
    });
    

    因此,在 Windows 服务中运行的任务正在使用的 MessageSender 类在 _context.Clients.All 中没有任何连接

    应该只有一个CreateDefaultBuilderhttps://github.com/aspnet/SignalR/issues/2347

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 2021-12-22
      • 2013-05-21
      • 2015-09-25
      • 1970-01-01
      • 2019-09-13
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多