バージョンが異なるコンポーネントのメタデータへのアクセス
Metadata Storage Service では、簡易データベースにレプリカと項目メタデータを格納します。メタデータは特定のテーブル スキーマにバイナリ形式で格納されますが、この形式は、新しいバージョンの Sync Framework がリリースされると変更される場合があります。また、データベースのカスタム プロバイダー フィールドは、開発者が新しいプロバイダーをリリースしたときに変更される場合があります。異なるバージョン間の相互運用性を高めるために、Sync Framework には、正規のファイル形式のほか、SyncMetadataStoreSerializer クラス (マネージ コード向け) と ISyncMetadataStoreSerializer インターフェイス (アンマネージ コード向け) が用意されています。これらを使用すると、新旧バージョン間である程度の範囲で変更されているメタデータの互換性を保つことができます。
Sync Framework は、メタデータ ストアのアップグレードもサポートします。詳細については、「メタデータ ストアのアップグレード」を参照してください。
バージョンの互換性確保を目的とした正規の形式の使用
正規の形式の主な利点の 1 つは、デバイスなどのパーシャル参加者レプリカを他のバージョンのプロバイダーと同期できることです。次の例を考えてみましょう。
あるアプリケーションが、各地のオフィスにある多数のサーバーとデバイスの同期をサポートしています。ユーザーは、デバイスとサーバーの同期、デバイスでのデータの変更、別のオフィスにあるサーバーとの同期などを実行できます。
この会社の連絡先プロバイダーは、1.0、2.0、2.5 という 3 つのバージョンがリリースされています。バージョン 1.0 は Sync Framework 1.0 に基づいており、他の 2 つのバージョンは Sync Framework 2.0 に基づいています。これら 3 つのバージョンすべてがまだ使用可能であり、企業ネットワークでサポートされます。
Sync Framework のバージョン管理
アプリケーションにおけるメタデータの格納先がデバイス上の Metadata Storage Service バイナリ ファイルであるとき、そのメタデータのスキーマと形式に、ユーザーが同期先として指定するプロバイダーとの互換性がない場合があります。この非互換性の問題が発生する可能性があるのは、プロバイダーのバージョンが異なり、プロバイダーが異なるメタデータ ファイル形式を使用している場合か、プロバイダーが別のバージョンの Sync Framework を使用している場合です。この問題を回避するには、アプリケーションで各サーバー上にあるバイナリ ファイルを使用し、このファイルと各デバイス上の正規のファイルとの間でメタデータをシリアル化および逆シリアル化するようにします。このプロセスは次のとおりです。
デバイスの最初の同期セッションが完了すると、アプリケーションが SerializeReplicaMetadata (マネージ コードの場合) または ISyncMetadataStoreSerializer::SerializeReplicaMetadata (アンマネージ コードの場合) を呼び出して、メタデータをデバイス上の正規のファイルにシリアル化します。
その後の各セッションで、アプリケーションは次の処理を行います。
DeserializeReplicaMetadata (マネージ コードの場合) または ISyncMetadataStoreSerializer::DeserializeReplicaMetadata (アンマネージ コードの場合) を呼び出して正規のファイルからメタデータを逆シリアル化し、サーバー上のバイナリ ファイルに適用します。
デバイスとサーバー間で変更を同期します。
SerializeReplicaMetadata (マネージ コードの場合) または SerializeReplicaMetadata (アンマネージ コードの場合) を呼び出し、更新されたメタデータをデバイスにシリアル化します。
このシリアル化と逆シリアル化のプロセスは効率的です。シリアル化の場合、Metadata Storage Service ストアからメタデータを選択するクエリのインデックスが作成され、逆シリアル化の場合、正規のファイルに対する増分変更のみがその対象となるためです。
プロバイダーのバージョン管理
SyncMetadataStoreSerializer クラス (マネージ コードの場合) と ISyncMetadataStoreSerializer インターフェイス (アンマネージ コードの場合) のメソッドは、プロバイダーのバージョンをメタデータの一部としてシリアル化し、メタデータを逆シリアル化する際にプロバイダーのバージョンが適切に設定されているを確認することで、プロバイダーのバージョン管理をサポートします。以下のシナリオについて考えてみます。
v1、v2、および v3 という 3 つのプロバイダー バージョンがあります。
v2 では、プロバイダーのカスタム スキーマに対して互換性のない変更が加えられました。
v2 と v3 は互換性があります。
v3 プロバイダーのメタデータをシリアル化する場合、メタデータのプロバイダー バージョンに値 v2 を指定できます。想定されるプロバイダー互換性バージョン パラメーターに値 v2 を指定することで、v2 プロバイダーまたは v3 プロバイダーはメタデータを逆シリアル化できます。v1 プロバイダーの場合は値 v1 を指定します。このメタデータは v1 と互換性がないので、逆シリアル化はその設計上失敗します。同じプロバイダーの前のバージョンとの互換性を最大限に確保するには、一般的な方法として、可能な限り最も低いバージョンを使用してください。
メタデータ スキーマをアップグレードする新しいバージョンのプロバイダーをリリースする際には、前のバージョンのプロバイダーとのメタデータの互換性を維持する必要があります。詳細については、「メタデータ ストアのアップグレード」を参照してください。