Синхронизация 2 .net приложений - PullRequest
2 голосов
/ 11 мая 2011

Доброе утро / день / вечер!

Есть 2 системы - CRM (настраиваемый SplendidCRM) и домашний монстр (crm + cms + backoffice).

  1. CRM - Asp.Net 2.0 WebSite, Sql Server 2008;реализовано с использованием представлений, хранимых процедур, триггеров;например, аудит реализован как триггер + SP;WebSite - это простой пользовательский интерфейс;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 и Wcf-сервис для домашнего монстра.Из-за изменений в реализации монстров можно применять только через Wcf Service (например, для аудита).Что касается Crm - его можно обновить с помощью вызова веб-службы или прямого вызова SP (но веб-служба предпочтительнее).

На данный момент в Crm есть столбец, который содержит внешний идентификатор объекта и существует своего рода синхронизация.но требуется более надежное и профессиональное решение.

По некоторым причинам (ошибка администратора или применено неправильное обновление) обе системы могут перейти в автономный режим.Это не должно влиять на синхронизацию - все обновления должны применяться, как только система вернется.Важно, чтобы данные из домашнего монстра имели более высокий приоритет и должны отменять изменения по сравнению с Crm.

Вопрос в том, какую технологию / библиотеку лучше использовать?Было бы хорошо, если бы синхронизация могла быть удалена «из систем» (системы будут генерировать события, когда данные изменились, а внешний инструмент синхронизирует изменения).Это связано с тем, что системы и правила синхронизации подвержены частым изменениям - например, первая «версия» синхронизации, при которой при определенных условиях удалялись объекты из Crm, вторая версия не удаляла, но экспортировало меньше данных, в «3-й версии» еще большебыли добавлены поля, общие для обеих систем.Эти изменения появятся в будущем, поэтому я не хотел бы трогать другие системы (или не их) и изменять только правила синхронизации.

Ответы [ 2 ]

0 голосов
/ 11 мая 2011

Я знаю, что вы говорите о синхронизации приложений, но может быть «лучше» (ИМХО) подумать только об использовании SQL Server для синхронизации данных.Это может быть сделано с помощью триггеров, заданий и / или пакетов.

Триггеры дадут вам возможность «синхронизировать», когда изменение произойдет (IE: в режиме реального времени), в то время как другие, вероятно, будут задержаны.

Все это будет зависеть от вашей среды, гдебазы данных расположены (IE: один и тот же сервер, два разных сервера) и насколько вы будете удобны при создании собственного процесса синхронизации.

РЕДАКТИРОВАТЬ:

Если выдействительно думают, что это должна быть синхронизация на основе приложений, тогда вам, вероятно, будет лучше развернуть собственное решение.Принимая во внимание сильно настроенную природу этих двух приложений, может быть трудно найти что-то, что ведет себя так, как вам нужно.

В этом случае я бы, вероятно, просто пошел с простым старым .net с Entity Framework и LINQ.

0 голосов
/ 11 мая 2011

Возможно, вы захотите проверить Microsoft Sync Framework , хотя Я не уверен, что лично порекомендую после его использования некоторое время.Он использует Sync Orchestrator для установки между двумя или более системами, поэтому звучит так, как будто он соответствует вашим требованиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...