Поделиться через


Как создать неуправляемое приложение синхронизации

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

В этом разделе предполагается, что читатель знаком с основными понятиями языка C++ и модели COM.

Примеры, приведенные в разделе, посвящены следующим компонентам Sync Framework:

Основные сведения о приложениях синхронизации

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

Дополнительные сведения о роли приложения синхронизации см. в разделе Реализация приложения синхронизации.

Требования построения

  • Synchronization.h: декларации компонентов Sync Framework.

    #include <synchronization.h>
    
  • SynchronizationErrors.h: пользовательские коды ошибок.

    #include <synchronizationerrors.h>
    
  • Synchronization.lib: библиотека импорта.

Пример

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

Учтите, что приложение может получать поставщики способом, который лучше всего подходит для данного типа приложений. В примере предполагается, что у приложения уже есть два интерфейса Интерфейс ISyncProvider: один из них представляет реплику источника, а другой — реплику назначения.

Создание и запуск сеанса синхронизации

В примерах используется метод CoCreateInstance для создания объекта IApplicationSyncServices. Затем этот объект используется для создания и инициализации объекта сеанса. Запускается сеанс. После окончания синхронизации пользователю выводится статистика сеанса в окне сообщения.

HRESULT Synchronize(ISyncProvider* pProvSrc, ISyncProvider* pProvDest)
{
    HRESULT hr = E_UNEXPECTED;

    IApplicationSyncServices* pSvc = NULL;
    hr = CoCreateInstance(CLSID_SyncServices, NULL, CLSCTX_INPROC_SERVER, 
        IID_IApplicationSyncServices, (void**)&pSvc);
    if (SUCCEEDED(hr))
    {
        ISyncSession* pSession = NULL;
        hr = pSvc->CreateSyncSession(pProvDest, pProvSrc, &pSession);
        if (SUCCEEDED(hr))
        {
            SYNC_SESSION_STATISTICS syncStats;
            // Arbitrarily choose "destination wins" conflict resolution.
            hr = pSession->Start(CRP_DESTINATION_PROVIDER_WINS, &syncStats);
            if (SUCCEEDED(hr))
            {
                // Display the session statistics to the user.
                CString strMsg;
                strMsg.Format(L"%d changes succeeded.\n%d changes failed.", syncStats.dwChangesApplied,
                    syncStats.dwChangesFailed);
                MessageBox(NULL, strMsg.GetString(), L"Synchronization Statistics", MB_ICONINFORMATION);
            }

            pSession->Release();
        }

        pSvc->Release();
    }

    return hr;
}

Следующие шаги

После создания приложения синхронизации может понадобиться создать службу синхронизации. Дополнительные сведения см. в разделе Как создать неуправляемую службу синхронизации. Также можно расширить возможности приложения, зарегистрировав его для получения уведомлений в ходе сеанса. Дополнительные сведения см. в разделе Реагирование на события синхронизации.

См. также

Справочник

Интерфейс ISyncSession
Структура SYNC_SESSION_STATISTICS

Основные положения

Реализация приложения синхронизации