0

我有一个为一些客户提供服务的 WCF 服务。设计是:

  • WCF 服务层
  • 业务逻辑层
  • 数据访问层(LINQ-To-Entities)

我需要有一个工作线程来对数据库进行一些连续工作(查找新记录,如果发现任何记录 - 以“推送”方式向客户端发送信息,这意味着 - 客户端将托管服务,以便它可以从这个工作线程接收“推送”通知)。

我将在 Windows 服务上托管 WCF 服务。

问题是:在我的设计中,我应该在哪里安装这个工作线程?它是否应该与 WCF 服务一起在 Windows 服务的“Program.cs”的“Main()”中生成?(这意味着它应该是 WCF 服务程序集的一部分)或者它应该是业务逻辑层的一部分 - 因此是“业务逻辑”程序集的一部分?

我的想法是:

在此处输入图像描述

4

1 回答 1

0

为什么它需要成为任一组件的一部分?我会完全在它自己的进程中托管这个工作线程。例如,将其托管在单独的 Windows 服务中。

然后它可以轮询数据库并将数据推送到客户端。

更新

您的设计将三种不同类型的操作结合在一起。首先你有数据库读取操作。然后你有数据库更新操作。然后你有数据库通知(或事件)。

这些不同类型的操作要求中的每一个都应该相互分离。这使得整个架构更易于维护和理解。

例如,通过解耦读取操作,您可以决定是否使用服务接口。也许可以让您的客户端使用 ADO 直接连接数据库以执行选择操作?

无论如何,无论您是否使用服务,更新操作都应该离线。没有充分的理由将读写操作耦合在一起。这也允许您减少数据库争用的可能性,并再次保持一切简单。客户端向更新队列发送异步更新命令,然后更新服务更新数据库。

这就是我的想法:

在此处输入图像描述

于 2012-04-20T06:46:21.393 回答