2013-04-18 16 views
5

私はMVCプロジェクトを複数のページで作成しています。異なるページをナビゲートする際にsignalRで同じ接続を再利用

私はクライアントの進行状況を更新する長い実行プロセスがあります。ただし、この更新プログラムはすべてにブロードキャストするのではなく、単一のクライアントにのみ送信されます。私layout.cshtmlで

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

、これは私がハブに接続する方法

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

ある問題は、私は別のページに移動したときに、私はもはやので、signalrからメッセージを受信、ではありません接続IDが変更されました。

この問題を回避するには、クライアントが1つのクライアントにメッセージを送信できるように、クライアントがページ間を移動する必要があります。

答えて

5

接続IDにユーザーのサーバーマッピングを作成する必要があります。参照:SignalR 1.0 beta connection factory

あなたは、OnDisconnectedイベントを過ぎてもユーザーを存続させ、別の接続IDで接続すると、引き続きデータをポンピングできます。

次のように思考プロセスは次のようになります。接続が完全に起動したら

  1. ページの負荷を、SignalR接続が
  2. インスタンス化されるコール=> TryCreateUserは、(それが存在していたか、それが作成されたかどうか、ユーザーを返します)。
  3. 長時間実行プロセスが
  4. クライアントがページを変更開始 - > SignalR接続が
  5. 新しいページのロードを停止し、接続が完全にクッキー、セッション、またはいくつかのタイプを持っているかどうかを確認開始されると、新しいSignalR接続が
  6. をインスタンス化されます=> TryCreateUser(userData)(最後のページで作成したユーザーを返します)。
  7. データはユーザーにポンピングされ続けます。

注:あなたは認証アプローチを取る場合は、前の接続を開始すると、データがSignalR接続の存続期間中に変更できないということで認証する必要があります、それだけで接続しながら、変更/作成することができます切断状態にある。

+0

AMは同じ問題に直面しています。タブが同じで、ビューのみが変更された場合はどうなりますか?リダイレクトが発生すると、新しいものが生成されました。 – bilal

関連する問題