WCF Duplex - Verschiedene Benachrichtigungen an jeden Client senden?

Ich entwerfe 2 WCF-Dienste, mit denen sich alle meine Kunden verbinden. Einer dieser Dienste wird ein Benachrichtigungsdienst sein.

Ich möchte, dass jeder Client eine Verbindung zum Service herstellt, ihn abonniert und dann Benachrichtigungen über eine Duplex-Callback-Schnittstelle erhält (der Service löst auf den Clients den Vorgang "Benachrichtigen" aus).

Das ist meine Designidee:

Meine Frage lautet: Wenn jeder Client eine Verbindung zu meinem Dienst herstellt, validiere ich ihn anhand der Tabelle "Users" in meiner Datenbank (ich verwende einen UserNamePasswordValidator und implementiere die Funktion "Validate").

Voraussetzung: Jeder Benutzer muss unterschiedliche Benachrichtigungen erhalten, basierend auf den in der Datenbank definierten Regeln.aber sie verwenden alle den gleichen Vertrag.

Zum Beispiel:

John SmithIn der DB gelten möglicherweise die folgenden Regeln: Benachrichtigen Sie mich über alle neuen Produkte mit einem Preis von über 100 US-Dollar.

Jane DoeIn der Datenbank gelten möglicherweise die folgenden Regeln: Benachrichtigen Sie mich bei allen neuen Produkten, deren Namen mit "JA" beginnen.

Jim JabraIn der DB gelten möglicherweise die folgenden Regeln: Benachrichtigen Sie mich über alle neuen Produkte des Typs "Lebensmittel".

Mein Dienst verfügt über einen Arbeitsthread, der eine Änderung in der Datenbank feststellt (ein neues Produkt wurde in die Datenbank eingefügt).

Es sollte dann eine Schleife über alle verbundenen Clients führen und ihm für jeden Client eine Benachrichtigung über das neue Produkt senden, nur wenn es mit den Benachrichtigungsanforderungen des Clients übereinstimmt.

Nochmals - Alle Clients erhalten dieselbe Art von Aktualisierung (neue Produkte), aber jeder Client sollte andere Produkte gemäß der Regel in der Datenbank erhalten.

Ein Ansatz, mit dem ich dies umsetzen wollte, war die Verwendung von aSingleton Service, der eine Liste von enthält:

Client EnpointBenutzerobjekt (aus Datenbank)

Auf diese Weise durchläuft der Arbeitsthread jedes Mal, wenn er ein neues Produkt erkennt, diese Liste und sendet Benachrichtigungen an alle, die es jemals benötigen. Das Problem bei diesem Ansatz ist, dass ich, um eine globale Liste von Kunden zu haben, den Service eines Singlton haben muss, oder?

Der zweite Ansatz wäre ... naja ... ich habe keine andere Vorstellung davon, wie ich über einen Worker-Thread auf eine Liste von Clients zugreifen kann, die mit dem Service verbunden sind ...

Ich denke, das Hauptproblem, das ich habe, ist, dass jeder Kunde verschiedene Arten von Produkten haben möchte, die ihm mitgeteilt werden. Das bedeutet, dass die Pub \ Sub-Methode hier nicht so gut ist, da in meinem Szenario der Service die Clients kennen muss.

Irgendwelche Vorschläge, wie ich diese Kopfschmerzen lösen kann?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage