我有一个 WCF 服务,所有客户端都连接到该服务以获取通知\提醒(使用他们实现的 CALLBACK 接口(interface))。目前 WCF 服务是自托管的,但计划将其托管在 Windows 服务中。
WCF 服务有“发布”、“订阅”和“取消订阅”操作。
我需要有一个后台工作线程,可以不断[每隔 XXX 分钟] 轮询一个 SQL 服务器数据库表,并查找某些“提醒”行。一旦找到它们 - 它应该通知所有连接的客户端。
我想到了 2 种方法来实现这一目标。
.
方法 A:
有一个单独的 EXE 项目(不希望它是一个控制台,那么它应该是什么 - 一个 Windows 服务?)将启动并运行后台线程。后台线程将作为其客户端之一连接到“提醒”服务。后台线程将轮询数据库,一旦发现 - 它会向 WCF 服务发送“发布”消息,这将使 WCF 服务向所有订阅的客户端发送提醒。
.
方法 B:
以某种方式使后台线程在 WCF 服务项目 中运行,并且当它在数据库中检测到新的提醒行时,以某种方式使其向 WCF 服务“发送信号”包含信息,然后 WCF 服务会将此信息发送给所有订阅的客户端。
.
哪种方法更好?还有其他建议吗?
最佳答案
如果这是一个长时间运行的进程,Windows 服务是完美的解决方案。 您的主 Win 服务线程将轮询数据库,将结果排队到某种供应商/消费者线程安全集合中。
您可以在 win 服务中托管 WCF 服务,然后它可以使用(删除)队列中的任何结果并按要求将它们传回客户端(对 WCF 的调用将在它们自己的线程中进行)
这是一个很常见的架构,实现起来并不困难。
关于wcf - 如何使用后台工作线程制作 WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274411/