Share via


プロバイダーとの相互運用

Metadata Storage Service は、同期プロバイダーの実装を容易にするメソッドを提供します。これらのメソッドは、次のようなタスクを実行するのに役立ちます。

  • 同期元プロバイダーで変更を列挙する。

  • 同期元プロバイダーで変更の列挙時に変更をフィルター選択する。

  • 同期先プロバイダーで Change Applier のために項目の同期先バージョンを取得する。

  • プロバイダーまたはアプリケーションで削除済みとマークされたメタデータ ストア内の項目をクリーンアップする。

  • 同期先プロバイダーで古くなった同期先レプリカを復旧する。

変更の列挙

レプリカ メタデータ オブジェクトには、プロバイダーが同期元プロバイダーとして動作するときに変更を列挙するメソッドが含まれています。ほとんどの場合、プロバイダーの GetChangeBatch メソッドは、パラメーターをレプリカ メタデータ オブジェクトの実装に直接渡すことで実装できます。

マネージ コード : 同期元レプリカに加えられた変更を列挙するには、ReplicaMetadata オブジェクトの GetChangeBatch メソッドを呼び出します。

アンマネージ コード : 同期元レプリカに加えられた変更を列挙するには、IReplicaMetadata::GetChangeBatch メソッドを呼び出します。

変更のフィルター選択

同期時のフィルター設定はコールバックを使用して処理します。コールバック メソッドは、項目が変更バッチに追加される前に呼び出されます。これにより、コールバック ハンドラーは、各項目を検査し、項目をバッチに含める必要があるかどうかを示すことができます。

マネージ コード : 変更バッチに含める変更をフィルター選択するには、ItemFilterCallback デリゲートを実装して GetFilteredChangeBatch に渡します。

アンマネージ コード : 変更バッチに含める変更をフィルター選択するには、IChangeBatchCallback を実装して IReplicaMetadata::GetFilteredChangeBatch に渡します。

同期先バージョンの取得

レプリカ メタデータ オブジェクトは、同期先プロバイダーが変更バッチに含まれる項目の同期先レプリカ上のバージョンを同期元プロバイダーから取得して ProcessChangeBatch メソッドを実装するのに役立つメソッドを提供します。この同期先バージョンのバッチは、Change Applier に渡すことができます。

マネージ コード : 同期先レプリカに適用できるバージョンが含まれた変更バッチを取得するには、ReplicaMetadata オブジェクトの GetLocalVersions メソッドを呼び出します。

アンマネージ コード : 同期先レプリカに適用できるバージョンが含まれた変更バッチを取得するには、IReplicaMetadata::GetItemBatchVersions メソッドを呼び出します。

削除済み項目のクリーンアップ

レプリカから削除された項目は、その項目が削除済みであることを示す値と共にメタデータ ストアに保持されます。レプリカ上の記憶領域が不足するのを回避するためには、これらの削除済み項目のメタデータを定期的にクリーンアップする必要があります。レプリカ メタデータ オブジェクトは、削除済みの項目をプロバイダーが定期的にクリーンアップするのに役立つ CleanupDeletedItems メソッド (マネージ コードの場合) または IReplicaMetadata::CleanupDeletedItems メソッド (アンマネージ コードの場合) を提供します。プロバイダーは、削除された項目をメタデータ ストアに保管する最小経過時間を表す間隔を指定し、クリーンアップ メソッドを定期的に (たとえばプロバイダーが変更の検出を実行するたびに) 呼び出します。負荷の大きい完全な列挙に対してプロバイダーを保護するために、クリーンアップ メソッドは、指定された時間が経過したときのみ削除済みの項目をクリーンアップし、指定された時間間隔を経過していない削除済みの項目を保持します。また、クリーンアップ メソッドは、忘れられたナレッジを更新して、消去された削除済み項目を反映させます。

古くなったレプリカの復旧

同期先レプリカが古くなっていることを Sync Framework が検出した場合、Sync Framework は、完全な列挙を実行して同期先レプリカを復元します。同期先レプリカが古くなる状況は、同期元レプリカが削除済みの項目をメタデータから削除したにもかかわらず項目の削除を同期先レプリカに通知していない場合に発生します。完全な列挙を実行するために、Sync Framework は、同期元プロバイダーの GetFullEnumerationChangeBatch メソッドと同期先プロバイダーの ProcessFullEnumerationChangeBatch メソッドを呼び出します。Metadata Storage Service は、プロバイダーがこれらのメソッドを実装するのに役立つメソッドを提供します。

マネージ コード : 同期元プロバイダーの GetFullEnumerationChangeBatch メソッドが呼び出されたとき、同期元プロバイダーは、ReplicaMetadata オブジェクトの GetFullEnumerationChangeBatch メソッドを呼び出すことができます。同期先プロバイダーの ProcessFullEnumerationChangeBatch メソッドが呼び出されたとき、同期先プロバイダーは、ReplicaMetadata オブジェクトの GetFullEnumerationLocalVersions メソッドを呼び出して、同期先レプリカに適用できるバージョンが含まれた変更バッチを取得できます。

アンマネージ コード : 同期元プロバイダーの GetFullEnumerationChangeBatch メソッドが呼び出されたとき、同期元プロバイダーは、IReplicaMetadata::GetFullEnumerationChangeBatch を呼び出すことができます。同期先プロバイダーの ProcessFullEnumerationChangeBatch メソッドが呼び出されたとき、同期先プロバイダーは、IReplicaMetadata::GetFullEnumerationItemBatchVersions を呼び出して、同期先レプリカに適用できるバージョンが含まれた変更バッチを取得できます。

参照

リファレンス

IReplicaMetadata インターフェイス
IChangeBatchCallback インターフェイス
ReplicaMetadata
ItemFilterCallback

その他のリソース

Sync Framework Metadata Storage Service