我正在设计我的所有客户都将连接到的 2 个 WCF 服务。其中一项服务将是通知服务。
我希望每个客户端都连接到服务,订阅它,然后使用双工回调接口接收通知(服务将触发客户端中的“通知”操作)。
这是我的设计理念:
我的问题是:当每个客户端连接到我的服务时,我将根据数据库中的“用户”表对其进行验证(我将使用 UserNamePasswordValidator 并实现“验证”功能)。
要求:每个用户需要根据数据库中定义的规则接收不同的通知,但他们都使用相同的合约。
例如:
数据库中John Smith的规则可能是:在所有价格超过 100 美元的新产品上通知我。
Jane Doe在数据库中的规则可能是:在所有新产品上通知我它们的名称以“JA”开头。
数据库中Jim Jabra的规则可能是:通知我所有属于“食品”类型的新产品。
我的服务将有一个工作线程来检测数据库中的更改(将新产品插入数据库)。
然后它应该遍历所有连接的客户端 - 并且只有当它与客户端的通知请求匹配时,才会为每个客户端向他发送新产品的通知。
再次 - 所有客户端都会收到相同类型的更新(新产品),但每个客户端应根据数据库中的规则接收不同的产品。
我认为实现这一点的一种方法是使用Singleton服务,该服务包含以下列表:
- 客户端端点
- 用户对象(来自数据库)
这样 - 每次工作线程检测到新产品时,它都会遍历此列表并将通知发送给需要它的人。这种方法的问题在于,为了拥有一个全球客户列表 - 我需要将服务作为 Singlton,对吗?
第二种方法是......好吧......我不知道如何从工作线程访问连接到服务的客户端列表......
我想我遇到的主要问题是每个客户可能希望将不同种类的产品通知给他。含义 - pub\sub 方法在这里不太好,因为我的场景需要服务了解客户端。
关于如何解决这个头痛的任何建议?