2009-09-30 8 views
5

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

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

ответ

9

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

Одна вещь, чтобы понять, о Sync Framework является то, что это действительно две совершенно различные структуры груза в одном пакете:

  • Sync Framework
  • ADO.NET Sync Services v 2
.

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

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

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

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

+0

Очень информативно, спасибо. – Chris

2

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

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


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

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

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

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

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

+0

Правильная интерпретация, yep. Я думал о том, чтобы использовать MSMQ, чтобы он был методом «огонь и забухание», который будет продолжать пытаться, пока он не доберется туда, но это по сути то же самое, что и ваш подход. Спасибо! – Chris

+0

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

+0

все, что вы можете предложить сейчас. Может ли msmq использоваться в том же приложении, которое вызывает api при офлайн-режиме? Нужен ли мне приемник для msmq? – coder771

Смежные вопросы