1

重複の可能性:
WCF Duplex - 各クライアントに異なる通知をプッシュしますか?

すべてのクライアントが接続する 2 つの WCF サービスを設計しています。これらのサービスの 1 つが通知サービスです。

各クライアントがサービスに接続し、サブスクライブしてから、デュプレックス コールバック インターフェイスを使用して通知を受信するようにします (サービスはクライアントで「通知」操作を開始します)。

これは私のデザインのアイデアです:

ここに画像の説明を入力

私の質問は次のとおりです。各クライアントがサービスに接続するときに、データベースの「ユーザー」テーブルに対して検証します ( UserNamePasswordValidatorを使用し、「検証」関数を実装します)。

要件: 各ユーザーは、データベースで定義されたルールに基づいて、異なる通知を受け取る必要があります。

私のサービスがデータベースの変更を検出したとします (タイプ「wine」の新製品がデータベースに挿入されました) - クライアントに通知する必要があります。ただし、すべてのクライアントにこれを通知する必要があるわけではありません。ワインに関する最新情報をリクエストしたクライアントのみに通知する必要があります。

これを行うにはどうすればよいですか?

クライアントが接続し、 UserNamePasswordValidatorを使用して検証されると、そのクライアントに何らかの「ClientID」が添付されますか?

サービスに「クライアント エンドポイント + クライアント ID」のローカル リストを保存するべきではないことはわかっています。これは、Singleton サービスを使用する必要があることを意味します。

では、サービスに接続する各クライアント (そのクライアントの ID) をどのように保存すればよいでしょうか?

データベース内のイベントが発生したときに、接続されているすべてのクライアントをループできるように、各クライアントの ID を知る必要があります。そのイベントについての通知を要求したかどうかをそれぞれチェックし、そうであれば、そのことを彼に通知します。イベント。

私の質問が理解されることを願っています...

4

1 に答える 1

0

これを実際に実現するのは難しいと思います。

可能な解決策は、サービス コールバック コントラクトのさまざまなリストを維持し、同じ数のサブスクライブ操作を公開することです。したがって、クライアントは、関心のあるイベントごとにサブスクライブ操作を呼び出し、サービスは、サブスクライブされたイベントごとにクライアントのコールバック コントラクトを 1 回呼び出すことができます。

ただし、この情報は公開されたサービス契約で体系化されるため、変更にはコストがかかるため、クライアントが何にサブスクライブしたいかを事前に正確に知る必要があります。

これをデータベースで定義されたルールにどのようにリンクするかはわかりません。

これを処理するもう 1 つの方法は、NServiceBus のような pubsub メッセージング プラットフォームに移行することですが、これは WCF の使用をやめることを意味します。

于 2012-04-24T10:57:18.627 に答える