コラボレーション同期のアーキテクチャとクラス

オフライン環境およびコラボレーション環境では、Sync Framework を 2 層アーキテクチャや N 層アーキテクチャで使用できます。どちらのアーキテクチャも、アクティビティは "同期セッション" 中に発生します。"同期オーケストレータ" が 2 つの "同期プロバイダー" と通信しながら、変更を取得して、それぞれのデータベースに適用します。同期プロバイダーは、テーブルごとに異なる "同期アダプター" を使用します。同期アダプターには、そのテーブルに必要な SQL コマンドが定義されています。これらのコマンドをカスタマイズできるように、アダプターを公開しているプロバイダーもあります。特定のストアを同期する際の複雑さを軽減するために、アダプターを自動的に生成するプロバイダーもあります。

次の図は 2 層のアーキテクチャを示しています。同期セッションに必要なすべてのコンポーネントがローカル コンピューターに配置され、ローカル コンピューターは、リモート コンピューター上のデータベースへ直接接続するようになっています。同期セッション時は、このローカル コンピューターから同期が開始されます。同期を複数のコンピューターから開始する場合は、それぞれのコンピューターに、この図に示すすべてのコンポーネントが含まれている必要があります。図の後で、各コンポーネントについて詳しく説明します。

2 層混合同期トポロジ

次の図は N 層アーキテクチャで、追加のコンポーネントが必要となります。たとえば、リモート コンピューター上に、先ほどは存在しなかったコンポーネントが追加されています。また、リモート データベースへの接続は、ローカル コンピューター上のプロキシとリモート コンピューター上のサービスによって処理されます。プロキシもサービスも、アプリケーション開発者が実装する必要があります。この作業に伴う複雑さを軽減するためにサンプルが用意されています。2 層アーキテクチャと同様、同期を複数のコンピューターから開始する場合は、それぞれのコンピューターにすべてのコンポーネントが含まれている必要があります。

N 層混合同期トポロジ

データベース

データベースは、SQL Server 2005 SP2 以降の任意のエディションを使用できます。SQL Server Compact 3.5 SP1 以降 (32 ビット バージョンおよび 64 ビット バージョン) のほか、ADO.NET プロバイダーが利用できるものであれば、それ以外のデータベースを使用することも可能です。SQL Server データベースと SQL Server Compact データベースについては、変更追跡およびメタデータのストレージが Sync Framework によって自動的に構成されます。詳細については、「コラボレーション同期を構成して実行する方法 (SQL Server)」を参照してください。SQL Server 以外のデータベースを使用する場合は、データベースを自分で準備 (プロビジョニング) する必要があります。詳細については、「コラボレーション同期用にサーバー データベースを準備する方法 (SQL Server 以外)」を参照してください。

同期オーケストレータ

同期オーケストレータでは、次の方法で同期が実行されます。

  • Direction プロパティに基づいて、変更の適用順序と適用方向を決定します。

  • リモート同期プロバイダーを呼び出してリモート データベースで変更を取得および適用します。

  • ローカル同期プロバイダーを呼び出してローカル データベースで変更を取得および適用します。

また、同期オーケストレータでは、同期セッションのセッション レベル情報が保持され、同期を開始するアプリケーションに成功のメッセージ、エラー、および統計情報が提供されます。詳細については、「SyncOrchestrator」を参照してください。

同期プロバイダー (SqlSyncProvider、SqlCeSyncProvider、DbSyncProvider)

各データベースとの通信は同期プロバイダーによって行われます。つまり、データベースの実装方法を意識せずに同期オーケストレータを使用することができます。SQL Server Compact データベースの場合は SqlCeSyncProvider を使用します。SQL Server の他のエディションの場合は SqlSyncProvider を使用します。それ以外のデータベースの場合は DbSyncProvider を使用します。この 3 つのプロバイダーはすべて RelationalSyncProvider を継承しています。同期プロバイダーの主要な動作は次のとおりです。

  • 前回の同期セッション以降にデータベースで発生した変更を取得します。

  • 増分変更をデータベースに適用します。

  • 競合する変更を検出します。

注意

SqlCeSyncProvider の 2 つのインスタンスを使用して 2 つの SQL Server Compact データベースを同期する場合は、N 層アーキテクチャを使用する必要があります。このシナリオでは 2 層アーキテクチャはサポートされません。

同期アダプター (DbSyncAdapter および SqlCeSyncAdapter)

同期アダプターは、ADO.NET のデータ アダプターをモデルとしており、同期対象のテーブルごとに定義します。同期アダプターは、同期プロバイダーに対し、データベースの操作に必要な特定の SQL コマンドを提供します。

SqlSyncProvider および SqlCeSyncProvider によって使用される同期アダプターに関しては、Sync Framework が自動的にコマンドを生成します。ただし、SqlCeSyncAdapter はプライベートに保たれ、公開されていません (このストアの同期に伴う複雑さを軽減するため)。DbSyncAdapter の場合は、アダプターを自分で作成して、コマンド (別のサーバーまたはクライアント データベースで発生した挿入操作をサーバー データベースに適用する InsertCommand など) を指定します。同期アダプターでは ADO.NET DbCommand オブジェクトが使用されるので、ADO.NET によってサポートされる任意のコマンド構造を使用できます。この構造には、インライン SQL、ストアド プロシージャ、単一テーブルに対するビュー、関数などが含まれます。コマンドが必要とするのは、転送および適用に使用する構造とデータを定義するための、単一の結果のみです。詳細については、「DbSyncAdapter」を参照してください。同期コマンドの詳細については、「コラボレーション同期を構成して実行する方法 (SQL Server 以外)」の「同期アダプター」を参照してください。

API のその他のクラス

このトピックの図では、API の主要なクラスを示していますが、ここでは示されていないクラスも多数あります。使用可能なすべてのクラスに関する情報を入手するには、Microsoft.SynchronizationMicrosoft.Synchronization.DataMicrosoft.Synchronization.Data.SqlServer、および Microsoft.Synchronization.Data.SqlServerCe の各トピックを参照してください。次のセクションでは、理解しておく必要のある他の重要なクラスについて説明します。

DbSyncScope

同期スコープは、1 つの単位として同期する必要のあるオブジェクトを論理的にまとめたグループです。データベースの同期では、通常、関連する複数のテーブルをスコープとしてグループ化します。さらに、それらのテーブルをフィルター選択することも可能です。テーブルは、1 つまたは複数のスコープに含めることができます。詳細については、「コラボレーション同期用にサーバー データベースを準備する方法 (SQL Server 以外)」の「同期するスコープを定義する」を参照してください。

データベース準備オブジェクト

SQL Server データベースおよび SQL Server Compact データベースに関しては、スコープを定義したり、各スコープに含めるテーブルを定義したりするための一連のクラスが Sync Framework に用意されています。テーブルとスコープを定義した後は、Sync Framework のオブジェクトを使用して、各ノードに準備スクリプトを適用します。このスクリプトによって、変更の追跡と変更の適用に必要な、メタデータ テーブル、トリガー、ストアド プロシージャから成るインフラストラクチャが形成されます。次の表は、データベースおよびプロバイダーのセットアップに使用されるクラスの一覧です。詳細については、「コラボレーション同期を構成して実行する方法 (SQL Server)」を参照してください。

SQL Server SQL Server Compact 説明

DbSyncScopeDescription

DbSyncScopeDescription

同期スコープを表します。同期スコープはまとめて同期されるテーブルの論理グループで、フィルター処理される場合もあります。

SqlSyncScopeProvisioning

SqlCeSyncScopeProvisioning

DbSyncScopeDescription オブジェクトによって表される特定のスコープに対応する SQL Server データベースまたは SQL Server Compact データベースの準備を表します。

SqlSyncProviderScopeConfiguration

SqlCeSyncProviderScopeConfiguration

特定のスコープの SqlSyncProvider または SqlCeSyncProvider によって使用される構成情報を表します。

DbSyncTableDescription

DbSyncTableDescription

同期スコープに含まれるテーブルのスキーマを表します。

DbSyncColumnDescription

DbSyncColumnDescription

同期スコープに含まれるテーブルに属している列のスキーマを表します。

SqlSyncDescriptionBuilder

SqlCeSyncDescriptionBuilder

同期に関係する SQL Server データベースまたは SQL Server Compact データベースのスコープおよびテーブル情報を表します。

SqlSyncTableProvisioning

SqlSyncTableProvisioning

DbSyncTableDescription オブジェクトによって表される SQL Server データベースまたは SQL Server Compact データベースの準備を表します。

SqlSyncProviderAdapterConfiguration

SqlSyncProviderAdapterConfiguration

SQL Server データベースまたは SQL Server Compact データベース内のテーブルの同期アダプターの構成情報を表します。

SyncOperationStatistics

セッションの統計情報は、同期オーケストレータから各同期セッションに提供される一連の統計情報です。この統計情報には、同期時間、処理された変更の数、および発生した競合や例外に関する情報が含まれます。詳細については、「SyncOperationStatistics」を参照してください。

DbSyncSession

同期セッション変数へのアクセスを提供する DbSyncSession オブジェクト。セッション変数は、DbSyncProvider および DbSyncAdapter を使用するサーバーで実行される選択、挿入、更新、および削除の各コマンドのパラメーターとして開発者が使用するために用意されている変数です。詳細については、「コラボレーションでの同期でセッション変数を使用する方法」を参照してください。

Sync Framework の DLL

Sync Framework のデータベース同期に関連したクラスは、次の DLL に含まれています。

  • Microsoft.Synchronization.dll: SyncOrchestrator が含まれています。

  • Microsoft.Synchronization.SqlServer.dll: SqlSyncProvider が含まれています。

  • Microsoft.Synchronization.SqlServerCe.dll: SqlCeSyncProvider が含まれています。

  • Microsoft.Synchronization.Data.dll: RelationalSyncProviderDbSyncProvider、および DbSyncAdapter が含まれています。

これらの DLL は、.NET Framework 2.0 以降のバージョンの System.dll と System.Data.dll に依存しています。

参照

概念

コラボレーションのシナリオ
コラボレーション同期を構成して実行する方法 (SQL Server)
他の ADO.NET 互換データベースの同期