Лабораторная работа 10 (ПКРПСиБД LAB10 Бочаров И.А.)

Посмотреть архив целиком

Национальный исследовательский институт

Московский Энергетический Институт (Технический Университет)

Институт автоматики и вычислительной техники

Кафедра Прикладной математики





Лабораторная работа №9

по дисциплине:

Проектирование крупных распределенных программных систем и баз данных

тема: «Microsoft Sync Framework»

Выполнил:

Бочаров Иван Андреевич

Проверил:

к.т.н., доц. Куриленко Иван Евгеньевич









Москва

2012 г.



Microsoft Sync Framework

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

Синхронизация файловых систем

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

  • Создает объект FileSyncProvider, представляющий каждую из папок.

  • Передает два поставщика объекту SyncOrchestrator и указывает один из них в качестве поставщика источника, а другой — в качестве поставщика назначения.

  • Вызывает Synchronize, чтобы начать сеанс синхронизации.

Задание параметров синхронизации

Объект FileSyncOptions позволяет определить ряд параметров синхронизации файлов, в том числе задать способ обнаружения изменений и необходимость удаления элементов или их перемещения в корзину в процессе синхронизации. В следующем примере кода определены четыре параметра, три из которых связаны с операциями удаления элементов. Параметр ExplicitDetectChanges указывает на то, что платформа Sync Framework не будет выполнять обнаружение изменений, если приложение явным образом не вызвало метод DetectChanges.

Осуществление обнаружения изменений

По умолчанию платформа Sync Framework выполняет обнаружение изменений в обеих репликах при каждом вызове метода Synchronize. Обнаружение изменений дает возможность платформе Sync Framework определить, какие элементы должны быть отправлены от источника к назначению, а какие из этих элементов конфликтуют (если есть). Параметр ExplicitDetectChanges позволяет управлять способом обнаружения изменений.

Определение статического фильтра

Для исключения файлов по имени (в том числе с использованием шаблонов) и по атрибуту можно задавать статические фильтры. Кроме этого, статические фильтры позволяют целиком исключать содержимое вложенных папок. Также можно задать явный список имен файлов, включаемых в синхронизацию (в том числе с использованием шаблонов). Для включения в область синхронизации файлы или папки должны пройти все фильтры. Например, если все файлы, имеющие расширение TXT, должны быть исключены из области, а файл MyFile.txt указан в списке файлов, предназначенных для явного включения в область, то файл MyFile.txt все равно будет исключен.

Обработка конфликтов

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

Приложение

Синхронизация баз данных

Платформы Sync Framework обеспечивают синхронизацию между базами данных. Предоставляется гибкий и интуитивно понятный API-интерфейс, который позволяет создавать приложения для работы вне сети и различных вариантов совместной работы. Этот API-интерфейс позволяет использовать все или некоторые из предоставляемых компонентов в зависимости от архитектуры и требований приложения. Платформа Sync Framework поддерживает клиент-серверную, одноранговую и смешанную топологии. В клиент-серверных топологиях все клиенты синхронизируются с центральным сервером. В одноранговой топологии каждый клиент может синхронизироваться с другим узлом без передачи изменений через центральный сервер. Смешанные топологии включают сочетание топологий «клиент-клиент» и «клиент-сервер».

Службы синхронизации баз данных

Ниже перечислены три основные службы синхронизации баз данных-источника Sync Framework, включающие:

  • Поставщик SqlSyncProvider предназначен для синхронизации баз данных SQL Server.

  • Поставщик SqlCeSyncProvider предназначен для синхронизации баз данных SQL Server Compact.

  • DbSyncProvider обычно используется для синхронизации баз данных, отличных от баз данных SQL Server

Данные поставщики имеют следующие характеристики.

  • Могут использоваться для клиент-серверных, одноранговых и смешанных топологий.

  • Могут использоваться более гибким образом. Например, можно синхронизировать два экземпляра DbSyncProvider либо один экземпляр SqlSyncProvider и один экземпляр SqlCeSyncProvider и т. д.

  • Используют метаданные Sync Framework и могут служить участниками в топологиях совместно с другими поставщиками Sync Framework.

Приложение

Создадим в запущенном экземпляре MSSQL при помощи Management Studio две базы данных: SyncDB и SyncClientDB. В первой создадим таблицу SyncTable :

Используя разработанное приложение, установим нужные для синхронизации таблицы:

Синхронизируем данные:

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

Код программ

Синхронизация файлов

using System;

using System.IO;

using Microsoft.Synchronization;

using Microsoft.Synchronization.Files;

using System.Threading;


public class Program

{

public static void Main(string[] args)

{

string folder1RootPath = "D:\\First";

string folder2RootPath = "D:\\Second";

while (true)

{

try

{

FileSyncOptions options = FileSyncOptions.ExplicitDetectChanges | FileSyncOptions.RecycleDeletedFiles | FileSyncOptions.RecyclePreviousFileOnUpdates | FileSyncOptions.RecycleConflictLoserFiles;

FileSyncScopeFilter filter = new FileSyncScopeFilter();

filter.FileNameExcludes.Add("*.jpg");

filter.SubdirectoryExcludes.Add("info");


DetectChangesOnFileSystemfolder(folder1RootPath, filter, options);

DetectChangesOnFileSystemfolder(folder2RootPath, filter, options);


SyncFileSystemFoldersOneWay(folder1RootPath, folder2RootPath, null, options);

SyncFileSystemFoldersOneWay(folder2RootPath, folder1RootPath, null, options);

Thread.Sleep(5000);

}

catch (Exception e)

{

Console.WriteLine("\nПолучено исключение! Текст сообщения:\n" + e.ToString());

}

}

}


public static void DetectChangesOnFileSystemfolder(string rootPath, FileSyncScopeFilter filter, FileSyncOptions options)

{

FileSyncProvider provider = null;


try

{

provider = new FileSyncProvider(rootPath, filter, options);

provider.DetectChanges();

}

finally

{

if (provider != null)

provider.Dispose();

}

}


public static void SyncFileSystemFoldersOneWay(string sourceRoot, string destinationRoot, FileSyncScopeFilter filter, FileSyncOptions options)

{

FileSyncProvider sourceProvider = null;

FileSyncProvider destinationProvider = null;


try

{

sourceProvider = new FileSyncProvider(sourceRoot, filter, options);

destinationProvider = new FileSyncProvider(destinationRoot, filter, options);


destinationProvider.AppliedChange += new EventHandler<AppliedChangeEventArgs>(OnAppliedChange);

destinationProvider.SkippedChange += new EventHandler<SkippedChangeEventArgs>(OnSkippedChange);


SyncOrchestrator agent = new SyncOrchestrator();

agent.LocalProvider = sourceProvider;

agent.RemoteProvider = destinationProvider;

agent.Direction = SyncDirectionOrder.Upload;


Console.WriteLine("Синхронизируем изменения для папки: " + destinationProvider.RootDirectoryPath);

agent.Synchronize();

}

finally

{

if (sourceProvider != null) sourceProvider.Dispose();

if (destinationProvider != null) destinationProvider.Dispose();

}

}


public static void OnAppliedChange(object sender, AppliedChangeEventArgs args)

{

switch(args.ChangeType)






Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.