まず、中央サービスにクライアントについて認識させ、クライアントに通知を送信してもらいたいと思いました。私の質問は、クライアント(WCFクライアント)をどのように確認できるかということです。サブスクライバーリストとしても、WCFクライアントに通知する必要があるクライアントのデータをリストします。
パブリッシャー/サブスクライバーアーキテクチャを実装するように見えますが、コールバックを介してリストした要件を達成しています。これを実現するための標準的な方法は、クライアントに中央サービスにサブスクライブさせることです。サブスクリプション時に、中央サービスは接続されたクライアントのリスト(クライアントをコールバックインスタンスとして表す)をディクショナリに保持します(これは1つの方法であり、静的リストは別の方法です)。例えば:
static Dictionary<INotificationCallback, string> subscribers = new Dictionary<INotificationCallback, string>();
クライアントがサービスにサブスクライブするときに、各コールバックインスタンスをサブスクライバーディクショナリに追加できます(実際には、サービスに接続するコールバッククライアントの各インスタンスをユーザー名(ディクショナリの文字列vlaue)とともに保存します)。
セントラルサービスは、コールバックコントラクト(ここではコールバックコントラクトINotificationCallback
)も定義する必要があります。これにより、セントラルサービスは、それに接続するクライアントでいくつかの操作を呼び出すことができます。これにより、中央サービスは、必要なデータをクライアントに送信できます。つまり、価格が変更されたときはいつでも送信できます。
次に、クライアントは特定のタスクの完了時にサーバーを更新する必要があります。
中央サービスで、タスクが正常に完了したときにクライアントが呼び出す別の運用コントラクトを定義するだけです。どのタスクが完了したかを追跡する方法と、それらを追跡する方法は完全にあなた次第です。
最近、誰かが同じような質問をしました。私の答えを見てみると、とても参考になると思います。また、WCFでのpub-subパターンと二重通信について学びたいと思ったとき、この記事は非常に役に立ちました。ただし、インターネット経由でこれを実行する場合は、SilverlightクライアントなどnetTcpBinding
のデュプレックスをサポートするHTTPベースのバインディングではなく、を使用する必要があります。wsDualHttpBinding
HttpPollingDuplex
更新:あなたの要求ごとにいくつかのより有用な記事/サンプル:
- デザインパターン:リストベースのパブリッシュ/サブスクライブ
- パブリッシャー/サブスクライバーモデルのWCF実装
- WCF-WPFチャットアプリケーション
最後のアプリケーションはチャットアプリケーションです。これは基本的にデュプレックスを使用します。これは、探しているものと非常によく似たサービスアーキテクチャです。