在浏览不同页面时重复使用signalR中的相同连接

时间:2013-04-18 08:00:08

标签: asp.net asp.net-mvc websocket signalr

我有一个MVC项目,有多个页面。

我有一个漫长的运行过程,它会更新客户端的进度。但是,此更新仅发送给单个客户端,而不是向所有客户端广播。

Clients.Client(ConnectionId).sendMessage(msg);

在我的layout.cshtml中,这是我连接到集线器的方式

    var serverHub = $.connection.notifier;
    window.hubReady = $.connection.hub.start(function () { });

问题是,当我导航到另一个页面时,我不再收到来自signalr的消息,因为连接ID已更改。

我应该如何解决此问题,以便我的信号器中心仍然可以向单个客户端发送消息,同时客户端从一个页面导航到另一个页面。

1 个答案:

答案 0 :(得分:5)

您需要创建用户到连接ID的服务器映射。见:SignalR 1.0 beta connection factory

您希望让用户坚持使用OnDisconnected事件,当他们使用不同的连接ID连接时,您可以继续向他们提取数据。

所以思考过程可以如下:

  1. 页面加载,实例化SignalR连接
  2. 一旦连接完全启动,请调用=> TryCreateUser(返回一个用户,无论它是否存在或是否已创建)。
  3. 长时间运行流程
  4. 客户更改网页 - > SignalR连接停止
  5. 新页面加载,实例化新的SignalR连接
  6. 一旦连接完全启动,请查看您是否有cookie,会话或某种类型的数据来表示您是谁=> TryCreateUser(userData)(返回您在最后一页上创建的用户)。
  7. 数据继续向用户灌输。
  8. 注意:如果您采用身份验证方法,则必须在开始连接之前进行身份验证,并且数据在SignalR连接的生命周期内无法更改,只能在创建/修改时进行连接处于断开连接状态。