【发布时间】:2012-05-05 02:07:37
【问题描述】:
我正在设计我的所有客户都将连接到的 2 个 WCF 服务。其中一项服务是通知服务。
我希望每个客户端都连接到服务,订阅它,然后使用双工回调接口接收通知(服务将触发客户端中的“通知”操作)。
这是我的设计理念:
我的问题是:当每个客户端连接到我的服务时,我将根据数据库中的“用户”表对其进行验证(我将使用 UserNamePasswordValidator 并实现“验证”功能)。
要求:每个用户需要根据数据库中定义的规则接收不同的通知,但他们都使用相同的合约。
例如:
John Smith 在 DB 中的规则可能是:通知我所有有价格的新产品 超过 100 美元。
Jane Doe 在 DB 中的规则可能是:在所有新产品上通知我其名称以“JA”开头。
Jim Jabra 在 DB 中的规则可能是:通知我所有属于“食品”类型的新产品。
我的服务将有一个工作线程来检测数据库中的更改(新产品已插入数据库)。
然后它应该遍历所有连接的客户端 - 并为每个客户端向他发送新产品的通知,前提是它与客户端的通知请求匹配。
同样 - 所有客户端都会收到相同类型的更新(新产品),但每个客户端应根据数据库中的规则接收不同的产品。
我认为实现此功能的一种方法是使用 Singleton 服务,该服务包含以下列表:
- 客户端端点
- 用户对象(来自数据库)
这样 - 每次工作线程检测到新产品时,它都会遍历此列表并将通知发送给需要它的人。 这种方法的问题在于,为了拥有一个全球客户列表 - 我需要将服务作为 Singlton,对吗?
第二种方法是......好吧......我不知道如何从工作线程访问连接到服务的客户端列表......
我想我遇到的主要问题是每个客户可能希望将不同种类的产品通知给他。含义 - pub\sub 方法在这里不太好,因为我的场景需要服务了解客户端。
关于如何解决这个头痛的任何建议?
【问题讨论】:
-
您是否考虑过使用队列。您的每个客户端都连接到队列并轮询可用的数据。并且简单地让 WCF 服务成为订阅数据的服务。然后在您的工作线程中,当数据与它们相关时,将数据推送到客户端队列。
-
队列如何准确解决我的问题?你是什么意思'wcf服务将成为订阅数据的服务'?你有我可以看的样本或例子吗?
标签: wcf push-notification