c# - SignalR 客户端未收到服务器消息
问题描述
我的 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
}
}
解决方案
我的 SignalR 客户端没有收到来自服务器的任何消息。我在这里想念什么?
根据您的代码,我们可以发现您使用强类型集线器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");
测试结果
推荐阅读
- python - Django删除旧的个人资料图像导致save()方法中出现此错误“profile_img”属性没有与之关联的文件
- asp.net - 如何在 Visual Studio 中生成独立的 React 应用程序项目?
- python - 用python交换数字
- objective-c - 错误:程序中的“@”和其他带有 NSArray 的杂散
- c# - 处理 Charge.refund webhook 时,Stripe.Net 发票属性为 NULL
- ios - iOS Swift - 在保存屏幕截图之前执行 func
- javascript - 导航栏在粘贴时会增加宽度。为什么?
- android - React-native Android:无法生成签名的 APK:“没有这样的规模”
- gradle - Gradle 隐式运行另一个任务
- c# - 如何中途停止动画并在Unity中中转?