C# 信号器客户端未接收服务器消息
我的SignalR客户端没有从服务器接收任何消息。我错过了什么 服务器集线器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> {
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");