2

早上好/下午/晚上好!

有 2 个系统 - CRM (customized SplendidCRM) и home-brewedmonster (crm+cms+backoffice)。

  1. CRM - Asp.Net 2.0 网站,Sql Server 2008;使用视图、存储过程、触发器实现;例如审计被实现为触发器+SP;网站是一个简单的用户界面;Ado DataSets 用作 Dtos
  2. 自酿怪物 - Asp.Net 3.5 WebApplication,SqlServer 2008;使用 ListToSql 实现;Sql Server 仅用作存储;在 C# 代码中实现的所有逻辑和审计;VS 的设计器生成的类用作 Dtos。

我需要在它们之间实现“双工”同步:

object is updated in Crm -> changes are applied in home-brewed monster
object is updated in home-brewed monster -> changes are applied in Crm

同步应该在“几乎实时模式”下工作——延迟是可以接受的。数据不多——目前大约有 35000 个对象和 120000 个审计条目,最多可以有 100000 个对象。对象也不是很大(数据库中有 60 列)。

对于这两个系统,都有一个允许更新的 Api:用于 Crm 的 Web 服务和用于自制怪物的 Wcf 服务。由于怪物的实现更改只能通过 Wcf 服务应用(例如,用于审计工作)。至于 Crm - 它可以通过 Web 服务调用或直接 SP 调用来更新(但最好使用 Web 服务)。

目前,Crm 中有一个包含对象外部 ID 的列,并且需要一种同步但更强大和更专业的解决方案。

由于某些原因(管理员失败或应用了错误的更新),两个系统都可能“脱机”。这不应该影响同步 - 系统恢复后应立即应用所有更新。重要的是,来自自制怪物的数据具有更高的优先级,并且应该覆盖来自 Crm 的更改。

问题是哪种技术/库更好用?如果可以将同步“从系统中取出”,那就太好了(系统会触发数据已更改的事件,而外部工具会同步更改)。这是由于系统和同步规则经常发生变化 - 例如,同步的第一个“版本”在某些情况下从 Crm 中删除对象,第二个版本没有删除但导出的数据更少,在“第三版”中更多一些添加了两个系统共有的字段。此更改将在将来出现,因此我不想触及其他系统(或非它们)并仅更改同步规则。

4

2 回答 2

0

您可能想查看Microsoft Sync Framework,但我不确定我是否会在使用一段时间后亲自推荐它。它使用 Sync Orchestrator 位于两个或多个系统之间,因此听起来可以满足您的要求。

于 2011-05-11T14:04:28.217 回答
0

我知道您在谈论同步应用程序,但考虑仅使用 SQL Server 同步数据可能会“更好”(恕我直言)。这可以通过触发器、作业和/或包来完成。

触发器将使您能够在发生更改时“同步”(IE:实时),而其他可能会延迟。

这完全取决于您的环境、数据库所在的位置(即:同一台服务器、两台不同的服务器)以及您在创建自己的“同步”过程时的舒适程度。

编辑:

如果您真的认为它应该是基于应用程序的同步,那么您最好推出自己的解决方案。鉴于这两个应用程序的高度定制特性,可能很难找到以您需要的方式运行的东西。

在这种情况下,我可能只会使用带有实体框架和 LINQ 的普通旧 .net。

于 2011-05-11T14:36:25.477 回答