2013-04-18 50 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

相關問題