wcf - 如何使用后台工作线程制作 WCF 服务?

标签 wcf backgroundworker

我有一个 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/

相关文章:

.net 核心调用 wcf 服务 - SecurityAccessDeniedException : The security token could not be authenticated or authorized

带通知的客户端/服务器 WCF 最佳实践

C# BackgroundWorker 问题

vb.net - 主用户界面窗口未更新控件-跨线程操作无效

vb.net - DoWork Ba​​ckgroundWorker内部的顺序过程

c# - C#中的BackgroundWorker运行多次

c# - 后台 worker 有限制吗?技术或常识

wcf - 向自托管 WCF 服务添加可选的 gzip 压缩

c# - SQL Server锁定问题(使用WCF的分布式事务)

wcf - 在 WCF 自托管服务中指定单例服务