パブリッシュ-サブスクライブ パターンで WCF サービスを作成しています。
誰かがイベントを発行したときに、すぐにすべてのクライアントに送信したくありません。
クライアントごとに、そのクライアントにその公開について通知する必要があるかどうかを確認できるようにしたいと考えています。
基本的に、これはデータベースにアクセスし、そのクライアントがそれらのパラメーターを使用してその特定のイベントをサブスクライブしているかどうかを確認することによって行われます (事前に行うことはできません。データベースに対してのみ確認する必要があります)。
現在、この List-Based Publish-Subscriberサンプルを使用して作業していますが、イベントが発行されると、クライアント セッションが個別にトリガーされてメッセージが送信されるように動作します。
だから今のところ、私はこれを変更しています:
public void PriceChangeHandler(object sender, PriceChangeEventArgs e)
{
_callback.PriceChange(e.Item, e.Price, e.Change);
}
これに:
public void PriceChangeHandler(object sender, PriceChangeEventArgs e)
{
// Perform some database checks using BL if this client needs to be notified about this event
// Only if answer is YES - call the callback function on that client
_callback.PriceChange(e.Item, e.Price, e.Change);
// Also - send the client an EMAIL + SMS
_emailServer.SendEmail(e.Item);
_smsServer.SendSMS(e.Item);
}
2 つの質問:
これは正しい方法ですか?そして、「この」クライアントが何であるかを知るにはどうすればよいですか? クライアントは、保存する「subscribe」メソッドで資格情報を送信する必要がありますか? または、プリンシパルを格納するカスタム 'UsernameValidator' を実装する必要がありますか?
また、BL に送信するすべてのクライアントの静的リストを用意する必要はありません。BL は、メッセージを送信する必要があるクライアントのみを返します。