2013-04-18 33 views
5

我有一个MVC项目,有多个页面。在浏览不同页面时重复使用signalR中的同一连接

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

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

在我layout.cshtml,我这是怎么连接到集线器

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

问题是,当我浏览到另一个网页,我不再收到来自signalr消息,因为连接ID已更改。

我应该如何解决此问题,以便我的信号中心仍然可以将消息发送给单个客户端,而客户端则在页面之间进行导航。

回答

5

您将希望创建用户到连接ID的服务器映射。参见:SignalR 1.0 beta connection factory

您将希望让您的用户持续通过OnDisconnected事件,并且当他们连接到不同的连接ID时,您可以继续向他们输入数据。

所以思维过程可能如下:

  1. 页面加载时,SignalR连接被实例化
  2. 一旦连接完全启动呼叫=> TryCreateUser(返回用户,无论它的存在还是它的创建)。
  3. 长期运行的进程启动
  4. 客户端更改页面 - > SignalR连接停止
  5. 新页面加载,新SignalR连接被实例化
  6. 一旦连接完全启动看看你是否有一个cookie,会话,或某些类型的代表您是谁的数据=> TryCreateUser(userData)(返回您在最后一页创建的用户)。
  7. 数据继续抽到用户。

注:,如果你把一个认证方法,你将不得不在开始连接之前验证和SignalR连接的生命周期中的数据不能改变,那就只能创建/而连接修改处于断开状态。

+0

AM在页面导航中面临同样的问题。如果一个标签保持不变并且只有视图会发生变化呢?发生重定向时,我生成了新的。 – bilal

相关问题