I work for Microsoft in the Windows Live division as a Software Design Engineer. One of the most interesting problems in the distributed world is managing and synchronizing changes in data elements on various endpoints. Microsoft released a CTP of its sync framework that is out for pre RTM preview (Read this). The API consists of three major components:
- Sync runtime - This is the actual sync runtime that performs transfer of knowledge and metadata and performs actual synchronization. This is the actual underlying sync engine.
- Metadata store - Keeps track of metadata of elements at a given endpoint. The API includes a SQL CE implementation of metadata store that can be used out of the box. This component can be customized to address a specific solution.
- Providers - The actual storage provider for elements. The API includes the filesystem and RSS providers out of the box. This again can be customized and custom providers can be plugged into the sync framework.
Customization of metadata store and providers is interesting as it can be utilized in providing sync solutions that operate on differential data sync algorithms.
Following is an example of file syncing between two file system providers. The example utilizes CTP2 of Microsoft Sync Framework (Read this).
static string folderA = Environment.CurrentDirectory + "\\A";
static string folderB = Environment.CurrentDirectory + "\\B";
static void Main(string args)
FileSyncProvider providerA = new FileSyncProvider(Guid.NewGuid(), folderA);
FileSyncProvider providerB = new FileSyncProvider(Guid.NewGuid(), folderB);
"This file is created by A");
"This file is created by B");
SyncOrchestrator agent = new SyncOrchestrator();
agent.LocalProvider = providerA;
agent.RemoteProvider = providerB;
agent.Direction = SyncDirectionOrder.UploadAndDownload;
static void PrepareDirectory(string directoryName)
At the end of running the sample, notice how both folders A and B have A.txt and B.txt.