使用工作线程的WCF服务 - 如何设计?

时间:2012-04-20 01:01:36

标签: wcf worker-thread

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

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

我需要一个工作线程在数据库上做一些连续的工作(查找新记录,如果发现任何 - 以'推送'的方式向客户端发送信息,意思是 - 客户端将托管服务所以它可以从这个工作者线程接收“推送”通知。)

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

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

我的想法:

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

<强>更新

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

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

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

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

这就是我的想法:

enter image description here