Значит ммеется 2 системы — CRM (кастомизированная SplendidCRM) и "доморощенный монстр" (помесь crm+cms+backoffice с шашками и пионэрками).
ТТХ:
1. CRM — Asp.Net 2.0 WebSite, Sql Server 2008; активно используются View, Stored Procedures, Triggers; например аудит реализован на связке trigger + SP; WebSite — тупая UI; в качестве dto используются Ado DataSets
2. "доморощенный монстр" — Asp.Net 3.5 WebApplication, SqlServer 2008; используется ListToSql; DB — тупо хранилище данных; вся логика и аудит реализован в коде; в качестве dto используются классы, генерируемые дизайнером VS.
Нужно реализовать синхронизацию данных между ними. Синхронизация должна быть двусторонней (с некоторыми оговорками):
обновили объект в CRM -> обновили соответствующий объект в "доморощенном монстре"
обновили объект в "доморощенном монстре" -> обновили соответствующий объект в CRM
Это должно работать в "режиме почти реального времени" (задержки допустимы). Данных не много (в настоящее время около 35000 объектов и 120000 записей в лог), обновлений тоже.
Для обеих систем есть API (WebService для CRM и Wcf Service для "монстра"), который позволяет добовлять/обновлять объекты. В виду особенностей "монстра" обновления ему можно скармливать только через Wcf Service (например чтобы отработал аудит), а для crm сойдет как вызов Web Service-а, так и дергание хранимки.
В настоящий момент в CRM есть колонка, в которой хранится внешний ключ объекта, и кое-какая синхронизация есть и работает, но хочется более надежного, более "профессионального" решения.
Обе системы независимо друг от друга могут "уходить в оффлайн" по причинам, не поддающимся устранению (например криворукость админов, или программистов, которые вылозили обновление, которое испортило экспорт/испорт). Это не должно влиять на синхронизацию — все обновления должны попасть в другую системы, когда она верется их оффлайна. Причем данные их "монстра" имеют "более высокий приоритет" и в случае возниктовения конфликтов должны использоваться они.
Вопрос: какую технологию(гии) лучше использовать для реализации? Хотелось бы вынести синхронизацию наружу из обеих систем, модифицировав код поминимуму, так как обе системы имеют нехорошую особенность обновляться, и при обновлении одной систем, не хотелось бы лезть в код другой если это возможно.