Вопрос

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

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

Это было полезно?

Решение

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

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

  • Структура синхронизации
  • ADO.NET Службы синхронизации v.2

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

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

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

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

Другие советы

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

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


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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top