接続の頻度があまり高くないアプリケーションの概要
更新 : 2008 年 7 月
接続の頻度があまり高くないアプリケーションとは、リモート データベースのデータを使用するが、リモート データベースに常にアクセスできるとは限らないアプリケーションのことです。接続の頻度があまり高くないアプリケーションは、継続的なアクセスが可能な状況でも、ほとんど変更されることがないデータ (状態や製品カテゴリの一覧など) をリモート データベースに継続的に照会するのは効率的でない場合に使用されます。このような状況では、アプリケーションはクライアントに存在するローカル データベースのデータを使用し、サーバーのリモート データベースとデータを定期的に同期できます。
言い換えると、アプリケーションがデータベースから継続的に取得する必要がないリモート データベースのデータを必要とする場合、ローカル データベース キャッシュを使用してクライアント コンピュータ上にデータを保存したり、アプリケーション内に直接データを保存したりすることができます。例として、データベース内の複数のテーブルのデータを使用する在庫管理アプリケーションについて考えてみましょう。個々の部品の在庫品目数は、継続的に変化するデータの重要な部分であるため、アプリケーションは可能であれば常に最新の値をデータベースに反映する必要があります。一方、アプリケーションにはほとんど変更されることがない配送業者の一覧も表示されます。これらの有効な配送業者は出荷業者テーブルに保存されますが、データベースにデータを照会するたびに取得する必要はありません。この出荷業者テーブルをローカル データベース キャッシュに保存することにより、アプリケーションがリモート データベースに対して生成する必要がある不必要なラウンドトリップの数を減らすことができます。したがって、接続の頻度があまり高くないアプリケーションにローカル データベース キャッシュを使用するのに加えて、ほとんど変更されることがないデータや、既知のスケジュールで変更されるデータをローカル データベース キャッシュに保存することも検討できます。
個々のテーブル、テーブルのセット、またはテーブルに照会される特定のレコード (たとえば、特定の販売担当者を持つ顧客だけなど) を保存するように、キャッシュを構成できます。
クライアント データベースとサーバー データベースの間のデータの同期は、Microsoft Synchronization Services for ADO.NET (Microsoft.Synchronization.Data 名前空間) によって行います。Visual Studio では、[データ同期の構成] ダイアログ ボックスを使用することにより、同期を視覚的に構成できます。
Visual Studio 2008 SP1 以降では、同期を構成する場合に、[データ同期の構成] ダイアログ ボックスに加えて、データ ソース構成ウィザードも使用できます。型指定されたデータセットの構成時に、ウィザードの [データベース オブジェクトの選択] ページで、[ローカル データベース キャッシュを有効にする] をオンにします。詳細については、「チュートリアル : データ ソース構成ウィザードを使用した接続の頻度があまり高くないアプリケーションの作成」を参照してください。
メモ : |
---|
スマート デバイス プロジェクトでは、データ ソース構成ウィザードから同期デザイナを開始できません。詳細については、「接続の頻度があまり高くないアプリケーション (デバイス)」を参照してください。 |
また、Visual Studio 2008 SP1 には、SQL Server 2008 の変更追跡機能のサポートが追加されました。[データ同期の構成] ダイアログ ボックスまたはデータ ソース構成ウィザードから同期を構成するときに、SQL Server 2008 の変更の追跡を有効にできます。詳細については、「方法 : SQL Server の変更の追跡を使用するようにデータ同期を構成する」を参照してください。
Synchronization Services API (Microsoft.Synchronization.Data)
Microsoft Synchronization Services for ADO.NET は、接続の頻度があまり高くないアプリケーション向けに設計されています。これにより、2 層、n 層、およびサービス ベースのアーキテクチャにまたがるさまざまなソースのデータを同期することが可能になります。Synchronization Services API では、データベースとそのスキーマをレプリケートできるだけではなく、データ サービスとローカル ストアの間でデータを同期する一連のコンポーネントも使用できます。アプリケーションは、中央サーバーへの一貫したネットワーク接続や信頼性のあるネットワーク接続を持たないモバイル クライアント (ノート型コンピュータやポータブル デバイスなど) でますます使用されるようになっています。これらのアプリケーションでは、クライアント上のデータのローカル コピーを使用して動作することが重要です。同様に重要なのは、ネットワーク接続が使用可能なときに、中央サーバーのデータによってデータのローカル コピーを同期するための要件です。ADO.NET データ アクセス API の後にモデル化された Synchronization Services API を使用すると、データを直感的に同期できます。接続の頻度があまり高くない環境のアプリケーションを、一貫したネットワーク接続に依存するアプリケーションの作成の論理的な拡張として作成できるようになります。
メモ : |
---|
スマート デバイス プロジェクトでは、2 層アーキテクチャはサポートされません。詳細については、「接続の頻度があまり高くないアプリケーション (デバイス)」を参照してください。 |
Synchronization Services API とドキュメントのインストール
Synchronization Services API は、.NET Framework の一部ではありません。これは SQL Server Compact 3.5 インストールの一部としてインストールされます (既定では、SQL Server Compact 3.5 は Visual Studio のインストール時にインストールされます)。既定では、Synchronization Services のドキュメントはインストールされません。したがって、ヘルプがオンラインで使用できるように構成されていないと、このドキュメントは使用できません。ローカルで使用できるように Synchronization Services のドキュメントをインストールするには、まず「Microsoft Synchronization Services for ADO.NET Books Online」の Web サイトからヘルプ コレクションをダウンロードする必要があります。
Visual Studio によるアプリケーションへのデータ同期の組み込み
データ同期をアプリケーションに組み込むために、Visual Studio にはローカル データベース キャッシュ テンプレートが用意されています。ローカル データベース キャッシュは、新しいプロジェクト項目テンプレートとして使用できます ([プロジェクト] メニューの [新しい項目の追加] をクリックします)。詳細については、「方法 : アプリケーションでデータ同期を構成する」を参照してください。
メモ : |
---|
ローカル データベース キャッシュ テンプレートをスマート デバイス プロジェクトに直接追加することはできません。代わりに、ローカル データベース キャッシュを中間層の WCF サービス プロジェクトまたは Web サービス プロジェクトに追加してから、生成された同期コンポーネントをスマート デバイス プロジェクトに分割する必要があります。詳細については、「接続の頻度があまり高くないアプリケーション (デバイス)」を参照してください。 |
Visual Studio 2008 SP1 以降では、同期を構成する場合に、[データ同期の構成] ダイアログ ボックスに加えて、データ ソース構成ウィザードも使用できます。型指定されたデータセットの構成時に、ウィザードの [データベース オブジェクトの選択] ページで、[ローカル データベース キャッシュを有効にする] をオンにします。詳細については、「チュートリアル : データ ソース構成ウィザードを使用した接続の頻度があまり高くないアプリケーションの作成」を参照してください。
ローカル データベース キャッシュを追加すると、[データ同期の構成] ダイアログ ボックスが開きます。このダイアログ ボックスでは、クライアントおよびサーバーの特定の情報を入力して、必要な同期コンポーネントを設定します。ローカル データベース キャッシュは、クライアント上の SQL Server Compact 3.5 データベースを使用してデータをローカルに保存します。既存の SQL Server Compact 3.5 データベースをローカル データベース キャッシュとして使用できます。ローカル データベースがまだない場合、[データ同期の構成] ダイアログ ボックスを使用して新しいローカル データベースを作成できます。新しいローカル SQL Server Compact 3.5 データベースを作成するには、[データ同期の構成] ダイアログ ボックスの [クライアント接続] を設定し、[サーバー接続] で選択したテーブルに基づいて新しい SQL Server Compact 3.5 データベースを作成します。
メモ : |
---|
[データ同期の構成] ダイアログ ボックスでは、ダウンロード シナリオでのみ Microsoft Synchronization Services for ADO.NET を構成できます。これは、このダイアログ ボックスを使用してデータ同期を構成した後、Microsoft.Synchronization.Data.SyncAgent.Synchronize を呼び出すと、リモート データベースで見つかった変更によってローカル データベースのみが更新されることを意味します。ローカル データベースのデータに加えられた変更は、リモート データベースにアップロードされません。[データ同期の構成] ダイアログ ボックスを使用してデータ同期を構成すると、同期中にプログラムによりアップロード (双方向同期) を有効にできます。詳細については、「方法 : ローカル データベースとリモート データベースで双方向同期を構成する」を参照してください。 |
同期対象のリモート データベースの構成
データ同期が正しく機能するには、同期対象とするリモート データベース上の各テーブルにいくつかの項目を追加する必要があります。[データ同期の構成] ダイアログ ボックスでは、必要なオブジェクト (以下の表に示すオブジェクト) を作成するためにリモート データベースに対して実行できる SQL スクリプトが作成されます。同期デザイナにより作成されるすべての SQL スクリプトは、プロジェクトの SQLScripts フォルダに保存されます。
メモ : |
---|
[データ同期の構成] ダイアログ ボックスによって生成された SQL スクリプトは、既定で実行されます。[オフライン使用のためのテーブルの構成] ダイアログ ボックスで [スクリプト生成] オプションを設定すると、スクリプトを生成および実行するかどうかを選択できます。 [データ同期の構成] ダイアログ ボックスの既定の動作では、このダイアログ ボックスを閉じたときにスクリプトが自動的に実行され、リモート データベースが更新されます。スクリプトを自動的に実行しない場合は [このダイアログが閉じられたらスクリプトを実行する] チェック ボックスをオフにします。また、リモート データベースに必要なトラッキング列、トリガ、および削除された項目テーブルが既にある場合、スクリプトは生成されません。言い換えると、リモート データベースを変更する必要がない場合は、スクリプトが作成されません。 |
次の表に、リモート データベースで必要な項目と各項目の説明を示します。
リモート データベース上で同期する各テーブルに追加する項目 |
説明 |
---|---|
LastEditDate 列 |
この列は、同期する各テーブルで DateTime または TimeStamp となっている必要があります。クライアント上の LastEditDate 列と比較され、前回の同期呼び出し以降にサーバー上で変更されたレコードを特定します。 |
CreationDate 列 |
この列は、同期する各テーブルで DateTime または TimeStamp となっている必要があります。クライアント上の CreationDate 列と比較され、前回の同期呼び出し以降にサーバーに追加されたレコードを特定します。 |
削除された項目テーブル (TableName_Deleted) |
項目は、データベース サーバー上のテーブルから削除されるとこのテーブルに移動されます。これは、前回の同期呼び出し以降にサーバーから削除されたレコードを特定します。同期対象の各テーブルには、リモート テーブルから削除されたレコードを追跡するために、削除された項目テーブルが必要です。 |
DeletionTrigger (TableName_DeletionTrigger) |
このトリガは、レコードがサーバー データベース テーブルから削除されるたびに表示されます。削除されたレコードは、削除された項目テーブルに移動されます。サーバー データベース上に存在しないクライアント データベースのレコードは新しいレコードとして扱われてサーバーに戻されるため、それらのレコードは削除された項目テーブルに移動されます。Synchronization Services は、削除された項目テーブルを確認し、削除されたレコードをサーバー データベースに戻すのではなく、クライアント データベースから削除する必要があるかどうかを判断します。 |
InsertTrigger (TableName_InsertTrigger) |
このトリガは、新しいレコードが追加されると、現在の日付と時刻を CreationDate 列に入力します。 |
UpdateTrigger (TableName_UpdateTrigger) |
このトリガは、既存のレコードが変更されると、現在の日付と時刻を LastEditDate 列に入力します。 |
アプリケーションからの同期処理の開始
[データ同期の構成] ダイアログ ボックスに必要な情報を入力したら、同期を開始するコードをアプリケーションに追加します。データを同期すると、データセット内のテーブルやアプリケーションの他のオブジェクトではなく、ローカル データベースが更新されることに注意してください。必ず、アプリケーション データ ソースに、ローカル データベースから更新されたデータを再読み込みしてください。たとえば、TableAdapter.Fill メソッドを呼び出して、データセットのデータ テーブルにローカル データベースから更新されたデータを読み込みます。
アプリケーションの同期処理を開始する場所に次のコードを追加します。
' Call SyncAgent.Synchronize() to initiate the synchronization process.
' Synchronization only updates the local database, not your project's data source.
Dim syncAgent As LocalDataCache1SyncAgent = New LocalDataCache1SyncAgent()
Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize()
' Add code here to refill your application's data source
' with the updated data from the local database.
// Call SyncAgent.Synchronize() to initiate the synchronization process.
// Synchronization only updates the local database, not your project's data source.
LocalDataCache1SyncAgent syncAgent = new LocalDataCache1SyncAgent();
Microsoft.Synchronization.Data.SyncStatistics syncStats =
syncAgent.Synchronize();
// Add code to refill your application's data source
// with the updated data from the local database.
参照
処理手順
チュートリアル : 接続の頻度があまり高くないアプリケーションの作成
方法 : ローカル データベースとリモート データベースで双方向同期を構成する
チュートリアル : 接続の頻度があまり高くないスマート デバイス アプリケーションの作成
概念
SQL Server Compact 3.5 と Visual Studio
その他の技術情報
変更履歴
日付 |
履歴 |
原因 |
---|---|---|
2008 年 7 月 |
データ ソース構成ウィザードからのデータ同期組み込みについての段落を追加 |
SP1 機能変更 |
2008 年 7 月 |
データ同期構成時に SQL Server の変更の追跡を有効化する方法についての段落を追加 |
SP1 機能変更 |
2008 年 7 月 |
スマート デバイス プロジェクトにおける同期についてのメモを追加 |
SP1 機能変更 |