そこで私は、Duplex Communications 用に人々が作成したサンプル例、つまり IIS によってホストされ、Silverlight 経由で接続された場合を見ていました。これにはたくさんの例があります (この MSDN の記事は素晴らしいです) が、すべて同じパラダイムを使用しています。
ユーザー A はサーバー A に接続し、将来の更新を受信するためにメモリ内リストに入れます。
ユーザー B がサーバー A に接続すると、リスト内のすべてのユーザーに誰かが「ログイン」したことが通知されます。
...しかし、いつ何が起こるか
ユーザー C はサーバー C に接続しますが、サーバー C のメモリ内リストにはユーザー A または B が含まれていません。
問題は、これをクラスター化された (Web ファーム) 環境に実装しようとしていることです。どのマシンが最終的に wcf 呼び出しを処理するかを確認できないため、これは事態を複雑にします。そのため、他のすべてのユーザーにメッセージを中継することは困難です。
私が考えることができる最良のシナリオは、実際にクライアントをある種のルーティング サービスに接続して、着信要求を受け取り、クライアントを特定のマシンに転送することです。もちろん、1 台のマシンがすべての着信要求を効果的に処理しているため、Web ファームの利点は失われます。
あまり効果的でない解決策は、サービスが何か (ファイルサーバー上のファイルまたは DB 内のテーブル) を継続的にポーリングして変更を探すことです。変更が表示されたら、それらをクライアントにプッシュします。これはとても醜い赤ちゃんのようですね。
私は何を逃したのですか?
更新 - ルーティング システムは私のニーズには対応していません。私のホスティング会社は、ファーム上の特定のマシンに IP 経由で直接接続することを許可していません。一般的なロードバランサーのフロントエンドにしか接続できないため、ユーザーが同じサーバーにアクセスすることを保証できません。
これまでのところ、データベース内のテーブルをポーリングして変更を探しています。まだ醜い赤ちゃんのようです。