標準のカスタム プロバイダーの実装

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

概念

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