【问题标题】:SignalR client not receiving server messagesSignalR 客户端未收到服务器消息
【发布时间】:2021-01-21 04:25:49
【问题描述】:

我的 SignalR 客户端没有收到来自服务器的任何消息。我在这里错过了什么?

服务器集线器

namespace DoneITWebAPI.Hubs
{
    public interface ITypedHubClient
    {
        Task BroadcastMessage(string name, string message);
    }

    public class ServiceStatusHub : Hub<ITypedHubClient>
    {
        public void Send(string name, string message)
        {
            Clients.All.BroadcastMessage(name, message);
        }

    }
}

控制器

[Route("api/[controller]")]
[ApiController]
public class DemoController : Controller
{
    IHubContext<ServiceStatusHub, ITypedHubClient> _chatHubContext;
    public DemoController(IHubContext<ServiceStatusHub, ITypedHubClient> chatHubContext)
    {
        _chatHubContext = chatHubContext;
    }

    // GET: api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        _chatHubContext.Clients.All.BroadcastMessage("ReceiveMessage", "test");
        return new string[] { "value1", "value2" };
    }
}

控制台客户端应用

class Program
{
    static void Main(string[] args)
    {
        var connection = new HubConnectionBuilder()
        .WithUrl("http://localhost:64165/ServiceStatusHub")
        .Build();

        connection.On<string, string>("ReceiveMessage", (user, message) =>
        {
            GetMessage(user, message);
        });

        connection.StartAsync();

        Console.ReadKey();
    }


    public static void GetMessage(string user, string message)
    {
        //Not hitting here
    }
}

【问题讨论】:

  • 你检查连接建立了吗?
  • 您能否向我们展示一下,您如何在Startup.cs 中注册您的集线器以及如何实际发送您想要接收的消息?

标签: c# asp.net-core asp.net-core-webapi asp.net-core-signalr


【解决方案1】:

我的 SignalR 客户端没有收到来自服务器的任何消息。我在这里错过了什么?

根据您的代码,我们可以发现您使用strongly typed hubs,并且您在控制台应用程序上定义并命名客户端方法为ReceiveMessage

为了让您可以按预期调用该客户端方法,您可以尝试修改您的中心代码,如下所示。

public interface ITypedHubClient
{
    Task ReceiveMessage(string name, string message);
}

public class ServiceStatusHub : Hub<ITypedHubClient>
{
    public void Send(string name, string message)
    {
        Clients.All.ReceiveMessage(name, message);
    }

}

并更改 API 操作中的代码

_chatHubContext.Clients.All.ReceiveMessage("system", "test");

测试结果

【讨论】:

  • 对不起,如果这是一个愚蠢的问题,但是除了将广播重命名为接收之外,您在示例中到底做了什么更改?这不应该有所作为
猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 2016-08-25
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多