C# 信号器客户端未接收服务器消息

C# 信号器客户端未接收服务器消息,c#,asp.net-core,asp.net-core-webapi,asp.net-core-signalr,C#,Asp.net Core,Asp.net Core Webapi,Asp.net Core Signalr,我的SignalR客户端没有从服务器接收任何消息。我错过了什么 服务器集线器 namespace DoneITWebAPI.Hubs { public interface ITypedHubClient { Task BroadcastMessage(string name, string message); } public class ServiceStatusHub : Hub<ITypedHubClient> {

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

    }
}
namespace DoneITWebAPI.Hubs
{
公共接口ITypedHubClient
{
任务广播消息(字符串名称、字符串消息);
}
公共类ServiceStatusHub:Hub
{
公共无效发送(字符串名称、字符串消息)
{
Clients.All.BroadcastMessage(名称、消息);
}
}
}
控制器

[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" };
    }
}
[路由(“api/[控制器]”)]
[ApiController]
公共类DemoController:控制器
{
IHubContext\u chatubContext;
公共DemoController(IHubContext-chatHubContext)
{
_chatHubContext=chatHubContext;
}
//获取:api/值
[HttpGet]
公共IEnumerable Get()
{
_chatHubContext.Clients.All.BroadcastMessage(“ReceiveMessage”、“test”);
返回新字符串[]{“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
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var connection=new HubConnectionBuilder()
.WithUrl(“http://localhost:64165/ServiceStatusHub")
.Build();
connection.On(“ReceiveMessage”(用户,消息)=>
{
GetMessage(用户,消息);
});
connection.StartAsync();
Console.ReadKey();
}
公共静态void GetMessage(字符串用户,字符串消息)
{
//这里不打球
}
}
我的SignalR客户端没有从服务器接收任何消息。我错过了什么

根据您的代码,我们可以找到您使用的,并且您在console应用程序上定义并命名客户端方法为
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);
    }

}
测试结果


您是否检查了连接是否已建立?您能否向我们展示一下,您如何在
Startup.cs
中注册集线器,以及如何发送您想要接收的消息?如果这是一个愚蠢的问题,很抱歉,但是在您的示例中,除了将广播重命名为receive之外,您到底做了哪些更改?那应该没什么区别
_chatHubContext.Clients.All.ReceiveMessage("system", "test");