建立连接时的 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 - 在单声道上运行时的依赖性问题

ASP.NET Core SignalR:集线器Hubs

ASP.NET Core SignalR 下:SignalR Javascript 客户端

SignalR .Net Core 多连接

.net core 3.0 Signalr - 09 待改进&交流