Параметры автономной синхронизации с .NET - PullRequest
5 голосов
/ 30 сентября 2009

Меня попросили изучить подходы к работе с приложением, которое мы собираемся создать. Это приложение, гипотетически форма Windows, написанная на C #, будет выдавать команды непосредственно на сервер, если оно подключено, но если приложение находится в автономном режиме, состояние должно поддерживаться так, как если бы оно было подключено, а затем синхронизироваться и выдавать изменения данных / команды для сервер, когда он подключен .

Я не уверен, с чего начать. Это что-то похожее на Google Gears, но я не думаю, что у меня есть такая возможность, если мы пойдем по пути Winform (что выглядит вероятным, учитывая, что существуют другие функции, которые нужны приложению, которые веб-приложение не может выполнять). Является ли Microsoft Sync framework жизнеспособным вариантом? Silverlight делает что-нибудь подобное? Есть еще варианты? Я немного погуглил, но хотел бы услышать мнение сообщества о том, что лучше всего, учитывая сценарий.

Ответы [ 2 ]

9 голосов
/ 30 сентября 2009

Microsoft Sync Framework определенно поддерживает описанный вами сценарий, хотя я бы сказал, что заставить его работать довольно сложно.

Одна вещь, которую нужно понять о Sync Framework, это то, что на самом деле это две совершенно разные платформы, поставляемые в одном пакете:

  • Sync Framework
  • Службы ADO.NET Sync v. 2

Службы ADO.NET Sync намного проще в настройке, но они ограничены синхронизацией двух хранилищ реляционных данных (хотя вы можете настроить веб-службу как удаленный фасад между ними). ​​

Ядро Sync Framework не имеет таких ограничений, но гораздо сложнее в реализации. Когда я использовал его около шести месяцев назад, я обнаружил, что лучшим источником для изучения был SDK, в частности пример кода синхронизации файлов и папок.

Насколько я могу судить, не было никакого совместного использования кода и типов между двумя «фреймворками», поэтому вам придется выбирать одну или другую.

В любом случае нет никаких ограничений на то, как вы размещаете код синхронизации, поэтому Windows Forms - это всего лишь один из многих вариантов.

2 голосов
/ 30 сентября 2009

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

Если я правильно понимаю, это один из вариантов. в противном случае это, вероятно, не поможет.


Это очень короткий ответ на глубокую проблему, но у нас была похожая ситуация, и именно так мы ее обрабатывали.

У нас есть клиентское приложение, которое должно отслеживать некоторые данные на ПК в магазине. Когда происходят определенные события, это клиентское приложение должно обновить наш сервер в корпоративных офисах, предпочтительно в режиме реального времени. Однако соединение не является надежным на 100%, поэтому нам необходим подобный механизм.

Мы решили эту проблему, пытаясь записать на сервер через веб-сервис. Если при вызове веб-службы произошла ошибка, команда сериализуется в виде XML-файла в папке с именем «ожидает загрузки».

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

Звучит хакерски, но это было просто закодировать и работало безупречно уже пять лет. На самом деле это было наше самое беспроблемное приложение, и мы успешно применили этот шаблон в других местах

...