如何使用后台工作线程创建WCF服务?

Joh*_*ner 2 wcf backgroundworker

我有一个WCF服务,所有客户端都连接到该服务,以获取通知\提醒(使用他们实现的CALLBACK接口).目前,WCF服务是自托管的,但计划是将其托管在Windows服务中.

WCF服务具有"发布","订阅"和"取消订阅"操作.

我需要有一个后台工作线程,不断[每隔XXX分钟]轮询一个SQL服务器数据库表,并寻找某些'提醒'行.一旦找到它们 - 它应该通知所有连接的客户端.

我想到了实现这一目标的两种方法.

.

方法A:

有一个单独的EXE项目(不希望它是一个控制台,那应该是什么 - 一个Windows服务?),它将启动并运行一个后台线程.后台线程将作为其客户端之一连接到"Reminder"服务.后台线程将轮询数据库,一旦找到某些内容 - 它将向WCF服务发送'发布'消息,这将使WCF服务向所有订阅的客户端发送提醒.

.

方法B:

以某种方式使后台线程 WCF服务项目中运行,并且当它在数据库中检测到新的提醒行时,以某种方式使其"发信号通知"具有该信息的WCF服务,然后WCF服务将该信息发送给所有订阅的客户端. .

.

哪种方法更好?还有其他建议吗?

Eri*_*rix 6

如果这是一个长时间运行的过程,Windows服务是一个完美的解决方案.您的主Win Service线程将轮询数据库,将结果排入某种供应商/消费者线程安全集合.

您可以在win服务中托管WCF服务,然后可以从队列中使用(删除)任何结果并按照请求将它们传递回客户端(调用WCF将在他们自己的线程中进入)

这是一种非常常见的架构,并不难实现.