在我的应用程序登录后,我重定向到主页,我有以下脚本:
// Defining a connection to the server hub.
var myHub = $.connection.myHub;
// Setting logging to true so that we can see whats happening in the browser console log. [OPTIONAL]
$.connection.hub.logging = true;
// Start the hub
$.connection.hub.start();
myHub.client.newMessageReceived = function (message) {
alert(message);
}
在我的Hub.cs服务器中,我有:
public override Task OnConnected()
{
var connectionId = Context.ConnectionId;
// here do other stuff...
return base.OnConnected();
}
我第一次进入主页时,我可以看到我得到connectionId
但是如果我再次重新加载页面,我会得到一个不同的页面,因为jquery脚本它正在发生#39}再次被召唤。
我如何在我的客户端中检测到我是否已连接,因此每次刷新该页面时我都不
start()
集线器?
答案 0 :(得分:2)
我有一个类似的场景,重定向触发了另一个连接到SignalR的请求-我通过检查connection.state
并过滤掉请求(除非连接处于Disconnected
状态)来解决。我使用的是angular + rxjs,但希望类似的原理仍然适用:
this.connection = new HubConnectionBuilder()
.withUrl(`${environment.apiUrl}/hubRoute`)
.configureLogging(LogLevel.Warning)
.build();
filter(() => this.hubService.connection.state === HubConnectionState.Disconnected)
// safe to call hubService.connection.start();
希望可以帮助其他人绊倒同一件事!