同期プロバイダ

Microsoft Sync Framework において、同期プロバイダは、レプリカがそのデータを他のレプリカとの間で同期することを可能にするソフトウェア コンポーネントです。同期アプリケーションでは、同期セッションを使用して、同期先プロバイダと同期元プロバイダを接続し、同期元レプリカで変更された項目を同期先レプリカに同期 (反映) します。同期プロバイダの単純な例としては、ファイル システムのフォルダを管理するプロバイダが挙げられます。このプロバイダを、フォルダを管理する別のプロバイダと接続することにより、一方のフォルダ内のファイルを、もう一方のプロバイダが管理するフォルダ内のファイルと同期させることができます。

同期中、同期先プロバイダは、現在のナレッジを提供し、変更の一覧を同期元から受け取り、その一覧と自分自身の項目間に競合があれば検出し、変更をそのデータ ストアに適用します。同期元プロバイダでは、同期先レプリカの現在のナレッジを使用して、同期元レプリカ内の変更のうち、同期先レプリカが把握していないものを判別し、その変更の一覧を同期先プロバイダに送信します。Sync Framework には、こうしたタスクの多くを同期プロバイダに代わって処理するコンポーネントが用意されています。

同期プロバイダの実装

同期プロバイダは、マネージ コードまたはアンマネージ コードを使って実装できます。

Security noteセキュリティメモ :

Sync Framework では、同期プロバイダを信頼されたコードと見なします。そのため、同期プロバイダを呼び出すアプリケーションでは、プロバイダの明示的なナレッジを含めるか、デジタル署名などの他のメカニズムを使用して、プロバイダの信頼を確立する必要があります。

マネージ コードを使用した同期プロバイダの実装

プロバイダを開発するうえで中心となる作業は、(SyncProvider 抽象クラスを継承する) KnowledgeSyncProvider 抽象クラス、IChangeDataRetriever インターフェイス、および INotifyingChangeApplierTarget インターフェイスを実装することです。

同期を開始するためには、同期アプリケーションが、プロバイダに実装されている SyncProvider を利用できることが前提となります。これをアプリケーションに必要なメカニズムを使って実現する必要があります。

通常の同期時に Sync Framework が行う基本的な呼び出しは、次のとおりです。

  • 両方のプロバイダの BeginSession が呼び出されます。これにより、同期セッションに参加しようとしていることがプロバイダに伝えられます。

  • 同期先プロバイダの GetSyncBatchParameters が呼び出されます。同期先プロバイダからは、そのナレッジと要求されたバッチ サイズが返されます。

  • 同期元プロバイダの GetChangeBatch が呼び出され、同期先プロバイダのナレッジが渡されます。同期元プロバイダは、同期先プロバイダのナレッジを使って変更を検出し、該当する変更のバッチを返します。詳細については、「変更の列挙」を参照してください。

  • 同期先プロバイダの ProcessChangeBatch が呼び出され、同期元プロバイダからの変更の一覧が渡されます。同期先プロバイダでは、Sync Framework の Change Applier コンポーネントを使用して、競合を検出し、変更を適用します。詳細については、「競合の処理」および「変更の適用」を参照してください。

  • バッチ内の各変更について、同期元プロバイダの LoadChangeData が呼び出されます。同期元プロバイダは、そのデータ転送メカニズムへのインターフェイスを返します。

  • バッチ内の各変更について、同期先プロバイダの SaveItemChange が呼び出されます。同期先プロバイダでは、同期元の転送メカニズムを使用して、変更に関連付けられているデータを転送します。

  • 同期先プロバイダの StoreKnowledgeForScope が呼び出されます。同期先プロバイダは、渡されたナレッジを現在のナレッジとして保存します。

  • 両方のプロバイダの EndSession が呼び出されます。これにより、参加していた同期セッションを終了するという情報がプロバイダに伝えられます。

アンマネージ コードを使用した同期プロバイダの実装

プロバイダを開発するうえで中心となる作業は、IKnowledgeSyncProviderISyncProviderISynchronousDataRetriever、および ISynchronousNotifyingChangeApplierTarget の各インターフェイスを実装することです。この中のいくつかのインターフェイスについては、非同期バージョンも存在します。詳細については、「IAsynchronousDataRetriever インターフェイス」および「IAsynchronousNotifyingChangeApplierTarget インターフェイス」を参照してください。

同期を開始するためには、同期アプリケーションが、プロバイダに実装されている ISyncProvider を利用できることが前提となります。これをアプリケーションに必要なメカニズムを使って実現する必要があります。

通常の同期時に Sync Framework が行う基本的な呼び出しは、次のとおりです。

  • 両方のプロバイダの BeginSession が呼び出されます。これにより、同期セッションに参加しようとしていることがプロバイダに伝えられます。

  • 同期先プロバイダの GetSyncBatchParameters が呼び出されます。同期先プロバイダからは、そのナレッジと要求されたバッチ サイズが返されます。

  • 同期元プロバイダの GetChangeBatch が呼び出され、同期先プロバイダのナレッジが渡されます。同期元プロバイダは、同期先プロバイダのナレッジを使って変更を検出し、該当する変更のバッチを返します。詳細については、「変更の列挙」を参照してください。

  • 同期先プロバイダの ProcessChangeBatch が呼び出され、同期元プロバイダからの変更の一覧が渡されます。同期先プロバイダでは、Sync Framework の Change Applier コンポーネントを使用して、競合を検出し、変更を適用します。詳細については、「競合の処理」および「変更の適用」を参照してください。

  • バッチ内の各変更について、同期元プロバイダの LoadChangeData が呼び出されます。同期元プロバイダは、そのデータ転送メカニズムへのインターフェイスを返します。

  • バッチ内の各変更について、同期先プロバイダの SaveChange が呼び出されます。同期先プロバイダでは、同期元の転送メカニズムを使用して、変更に関連付けられているデータを転送します。

  • 同期先プロバイダの SaveKnowledge が呼び出されます。同期先プロバイダは、渡されたナレッジを現在のナレッジとして保存します。

  • 両方のプロバイダの EndSession が呼び出されます。これにより、参加していた同期セッションを終了するという情報がプロバイダに伝えられます。

同期プロバイダの作成方法の詳細については、「アンマネージ同期プロバイダを作成する方法」を参照してください。

参照

リファレンス

IKnowledgeSyncProvider インターフェイス
ISynchronousDataRetriever インターフェイス
ISyncProvider インターフェイス
ISynchronousNotifyingChangeApplierTarget インターフェイス
KnowledgeSyncProvider
SyncProvider
IChangeDataRetriever
INotifyingChangeApplierTarget

概念

アンマネージ同期プロバイダを作成する方法
変更の列挙
競合の処理
変更の適用
変更単位の同期
同期の進行状況の報告
同期データのフィルタ設定
同時的な同期タスクのサポート
FeedSync フィードとの相互運用
古くなったレプリカの復旧

その他のリソース

Microsoft Sync Framework