业务对象WCF服务之间的同步

业务对象WCF服务之间的同步

问题描述:

我正在将我的架构从耦合到SOA(WCF)松散耦合。 我有几个相互沟通的服务。 您将如何同步服务之间的业务实例?业务对象WCF服务之间的同步

在这里我看到两种情况:

  1. 所有业务对象中只有一个服务的创建,让我们把它MainService,它是谁拥有所有的对所做的更改访问的唯一一个对象。该服务负责更新数据库中的对象。对象的任何更新都会引发通知。其他服务注册他们需要的事件并相应地收到通知。我称之为集中式的做法。很多服务之间的通话 -

    +作为换做是
    尽快通知服务。
    -更多的耦合。

  2. 所有的服务只是加载他们需要的对象,并定期监视数据库中是否有任何更改。我的想法是使用sql server 2008的更改跟踪来检测对对象所做的任何更改。

    +交通服务之间的通信可行的问题少。
    +较少耦合
    -由于定期监测导致的延迟。

那么,你对此的回答是什么? (如果你有3,4,等...这也将是不错的)

为什么您需要在服务之间同步业务实例?这听起来像服务不够松散耦合了。

+0

问题是某些服务需要以某种方式通知,以便知道哪些对象(业务实例)已被修改。 所以我有两个解决方案。首先是当业务对象被修改时通知其他服务的组件。另一个是通过更改跟踪来轮询数据库中的更改。 – Roubachof 2009-10-27 16:56:27

在第一个选项主要服务成为故障和性能瓶颈的一个点。

在第二种情况下,您会冒很多不必要的信息轮询风险。

第三sugestion是:

如果每个服务都有自己的数据库,你可以使用数据库复制数据从它创建服务移动,在其使用的其他服务。

编辑基于您的评论

。您可以尝试使用数据库后备存储的企业库缓存。这样你就可以将数据存储在内存中,但是如果数据库中的值被更新,它会被更新。

+0

是的!你已经很好地描述了这两种方法的缺点。 复制不会对我有帮助,我需要通知。 在一个“理想”的世界里,我的WCF服务将订阅一些数据库事件,并相应地更新它们的业务对象... – Roubachof 2009-10-27 17:08:31

+0

Thx for this answer! 然而,高速缓存块与我的解决方案n°2的做法一样,不那么聪明。 它定期刷新所有缓存(必须比较所有对象的版本)并相应地引发事件。矿井将定期轮询缓存块,但只会监视所需项目的更改跟踪表中已更改的项目。 – Roubachof 2009-10-28 09:10:05