建立连接时的 SignalR Core 调用函数
Posted
技术标签:
【中文标题】建立连接时的 SignalR Core 调用函数【英文标题】:SignalR Core call function when connection is established 【发布时间】:2019-04-24 01:39:13 【问题描述】:当我的客户端成功连接到集线器时,我希望客户端立即加入一个组。我的集线器中有一个方法可以做到这一点,我只需要一个事件处理程序来建立连接,就像
connection.start().done(
function ()
connection.invoke('JoinGroup', 'GroupName');
);
在 SignalR 中用于普通 ASP.Net。
我可以这样做还是必须设置一个计时器才能在start();
调用后 x 秒后这样做?
编辑:
我发现我可以做到
connection.start(
function ()
connection.invoke('JoinGroup', 'GroupName');
);
但它告诉我它Cannot send data if the connection is not in the 'Connected' State.
做什么?
【问题讨论】:
【参考方案1】:由于版本不匹配等原因,SignalR 非常困难。
请看以下文章:https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-2.1&tabs=visual-studio
其中有一段指定如何开始(并等待建立连接):
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.start().then(() =>
//try some stuff here :)
)
.catch(function (err)
//failed to connect
return console.error(err.toString());
);
javascript 客户端使用必须先解决/拒绝才能使用它的承诺。 另一种选择是封装在 async 方法中并等待调用(不确定这是否会正常工作)。如:
await connection.start();
//connection should be started now. beware of exceptions though
【讨论】:
我试过await connection.start()
但它告诉我这仅适用于异步函数。我会试试then
。感谢您的快速回复。
是的,没错,它必须在异步函数() :-) 中。没问题。祝你好运!
它仍然是Cannot send data if the connection is not in the 'Connected' State.
,但它确实收到了发送到它应该加入的客户端组的方法调用。我想这已经足够了。
在集线器中检查,有两种方法称为 OnConnected 和 OnDisconnected,您可以从继承的集线器覆盖它们以进行故障排除。
“经验只是我们给错误取的名字”——奥斯卡·王尔德。 :-) 因此,我怀疑无法连接您的客户端在说明无法协商(或类似情况)之前会出现一些错误。答案是启用名为 CORS 的东西。这里的基本示例:***.com/questions/48185985/… 我建议您查看 ASP 核心的 CORS 内容并设置仅将您的域列入白名单的策略。以上是关于建立连接时的 SignalR Core 调用函数的主要内容,如果未能解决你的问题,请参考以下文章
.net core 3.0 Signalr - 01 基础篇
AspNet Core SignalR - 在单声道上运行时的依赖性问题