【问题标题】:How to listen to all callbacks from the server to client in SignalR?如何在 SignalR 中监听从服务器到客户端的所有回调?
【发布时间】:2021-04-07 08:59:10
【问题描述】:
要在 SignalR (JavaScript) 中为特定方法注册回调,您可以执行以下操作:
hubConnection.on("MyMethod", (...) => { ... });
但是,是否可以监听所有方法并获取所有参数?
【问题讨论】:
-
请检查this tutorial:JavaScript 客户端通过 HubConnection 的 invoke 方法调用集线器上的公共方法。并且,要从集线器接收消息,请使用 HubConnection 的on 方法定义一个方法。 SignalR 通过匹配SendAsync 和connection.on 中定义的方法名称和参数来确定调用哪个客户端方法。
标签:
javascript
signalr
asp.net-core-signalr
【解决方案1】:
我不这么认为,因为您必须在开始连接之前注册所有回调。文档中的这个示例显示了这一点。
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
//Disable send button until connection is established
document.getElementById("sendButton").disabled = true;
connection.on("ReceiveMessage", function (user, message) {
var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
var encodedMsg = user + " says " + msg;
var li = document.createElement("li");
li.textContent = encodedMsg;
document.getElementById("messagesList").appendChild(li);
});
connection.start().then(function () {
document.getElementById("sendButton").disabled = false;
}).catch(function (err) {
return console.error(err.toString());
});
document.getElementById("sendButton").addEventListener("click", function (event) {
var user = document.getElementById("userInput").value;
var message = document.getElementById("messageInput").value;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
event.preventDefault();
});