c# - SingalR 消息未发送到客户端且没有任何错误
问题描述
我有一个集线器类:
public class OrderHub : Hub
{
public override Task OnConnected()
{
Clients.Caller.orderMessage("New connection");
return base.OnConnected();
}
public static void SendOrderMessage(string msg)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<OrderHub>();
hubContext.Clients.All.orderMessage(msg);
}
}
调用静态方法的事件处理程序:
public async Task Handle(IOrderProcessedEvent message, IMessageHandlerContext context)
{
// Here we could write a code with SignalR to notify the page about successful process
while (true)
{
await Task.Delay(1000);
//orderHub.OrderMessage("Order processed successfully");
OrderHub.SendOrderMessage("Order processed successfully");
}
}
还有一个应该记录消息的简单 JavaScript 代码(这是一个非常简化的示例):
@section scripts{
<script src="~/Scripts/jquery-1.9.1.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="/signalr/hubs"></script>
<script language="javascript">
$(function () {
var hub = $.connection.orderHub;
console.log("hub initiated");
hub.orderMessage = function (msg) {
console.log(msg);
};
$.connection.hub.start();
});
</script>
缺少一些东西,因为该函数从未被调用,不是来自 OnConnected,也不是来自静态方法。
console.log("hub initiated");
行被打印,并且集线器变量有效,但实际function(msg)
从未被调用。
我错过了什么?
解决方案
您缺少“客户”:
hub.client.orderMessage = function (msg) {
console.log(msg);
};
推荐阅读
- javascript - 未在子文件夹路径上设置 Cookie
- azure-devops - 基于子文件夹提交运行 DevOps 代理作业
- javascript - Phaser3 中的随机星星
- php - 轮播,每张幻灯片上包含三个项目
- reactjs - 无法使用 Firebase v9 Modular React JS 读取未定义的属性(读取“indexOf”)
- r - 使用创建新列的函数/循环
- python - 如何处理status=status.HTTP_400_BAD_REQUEST的返回值
- java - Java 独立应用程序的行为与 windows-10 中的长时间运行不一致
- reactjs - 如何在 react.js 中的页面加载时显示引导模式?
- javascript - 为什么 GSAP 中的事件监听器从整个屏幕而不是内部部分获取变量?