SignalR - 为什么当用户重新加载页面时会调用另一个集线器的Disconnect方法?

时间:2012-02-23 13:45:53

标签: asp.net-mvc-3 signalr

背景

我无法弄清楚为什么从尚未初始化的集线器调用Disconnect的原因。

我有两个不同的MVC视图,可以创建不同的信号连接:

  • ListView(JS创建与ListHub的连接,实现IDisconnect)
  • DetailsView(JS创建与DetailsHub的连接, 实施IDisconnect)

当用户登录时,他/她被重定向到ListView,其中javascript创建与ListHub的连接,以便页面知道锁定/解锁列表中的项目的事件。当用户点击某个项目时,会向ListHub发送一个信号,该项目将被用户锁定。之后,我通过使用event.preventDefault()来停止点击执行GET请求,并且它运行良好。

问题是...... 一旦用户离开另一个页面 - 或者只是重新加载页面 - 将触发 DetailsHub 的Disconnect方法。我不明白为什么会这样。请记住,ListHub是迄今为止唯一的活动中心。没有其他集线器或连接已初始化。不过,这是我正在采取的行为。

我想要实现的目标

我在这里想要实现的是在DetailsHub上引发/调用Disconnect时执行的操作。当用户断开与ListHub的连接时,我不希望发生任何事情。

1 个答案:

答案 0 :(得分:1)

它是用signalR项目的wiki编写的:

  

每当客户端断开连接时,将在所有实现IDisconnect的集线器上调用Disconnect方法。调用此方法时,可以使用Context.ConnectionId访问断开连接的客户端。

https://github.com/SignalR/SignalR/wiki/Hubs