チュートリアル : 接続の頻度があまり高くないスマート デバイス アプリケーションの作成
更新 : 2008 年 7 月
このチュートリアルでは、接続の頻度があまり高くないスマート デバイス アプリケーションでデータ同期を構成する詳細な手順について説明します。サンプル アプリケーションでは、ローカル データベース キャッシュに顧客が追加され、変更がリモート データベースと同期されます。また、Windows フォームに顧客データが表示されます。これにより、同期が成功したことを確認できます。
このチュートリアルでは、次の手順を行います。
新しいスマート デバイス アプリケーションを作成します。
ローカル データベース キャッシュとリモート データベースの間の中間層として機能する新しい WCF (Window Communication Foundation) サービス ライブラリを追加します。
メモ : Synchronization Services for ADO.NET (デバイス) では 2 層の直接同期をサポートしないため、中間層のサービス ライブラリが必要です。
新しいローカル データベース キャッシュをプロジェクトに追加します。
同期設定を構成します。
WCF サービスを構成および開始します。
デバイス アプリケーションに同期機能を追加します。
アプリケーションをテストします。
前提条件
このチュートリアルを完了するには、次の操作を行う必要があります。
Microsoft SQL Server データベースまたは Microsoft SQL Server Express Edition データベースに Northwind サンプル データベースをインストールします。デバイス エミュレータのローカル データベース キャッシュは、このデータベースと同期されます。詳細については、「方法 : サンプル データベースをインストールする」を参照してください。
Windows Mobile Device Center (Windows Vista) または ActiveSync をインストールします。
Visual Studio 2008 Service Pack 1 をインストールします。
Microsoft Synchronization Services for ADO.NET v1 SP1 (デバイス) をインストールします。
スマート デバイス アプリケーションの作成
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
デスクトップ コンピュータで新しいプロジェクトを作成するには
[ファイル] メニューで、Visual Basic または Visual C# を使用する新しいプロジェクトを作成します。
メモ : [データ同期の構成] ダイアログ ボックスは、Visual Basic プロジェクトと C# プロジェクトでサポートされています。そのため、これらの言語のいずれかを選択するようにしてください。
ソリューションに「Walkthrough」、プロジェクトに「OCSDeviceApp」という名前を付けます。
[プロジェクトの種類] で [スマート デバイス] をクリックし、[スマート デバイス プロジェクト] テンプレートをクリックします。
[OK] をクリックします。
[新規スマート デバイス プロジェクトの追加] ダイアログ ボックスが表示されます。既定では、対象のオペレーティング システムである Windows Mobile 5.0 Pocket PC の SDK、.NET Compact Framework Version 3.5、およびデバイス アプリケーション テンプレートが選択されています。
[OK] をクリックします。
OCSDeviceApp プロジェクトが作成され、ソリューション エクスプローラに追加されます。
WCF サービスの作成
ローカル SQL Server Compact データベース キャッシュは、デスクトップ アプリケーションとは異なり、スマート デバイス プロジェクトのためにリモート SQL Server データベースと直接同期できません。2 つのデータベース間の中間層として機能する WCF サービス ライブラリを作成する必要があります。デバイス アプリケーションでは、WCF サービスによって公開されるサービスを使用して同期します。
ソリューションに WCF サービス ライブラリを追加するには
[ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックします。
プロジェクトに「MiddleTierServiceLibrary」という名前を付けます。
[プロジェクトの種類] で [WCF] をクリックしてから、[WCF サービス ライブラリ] テンプレートをクリックします。
[OK] をクリックします。
MiddleTierServiceLibrary プロジェクトが作成され、ソリューション エクスプローラに追加されます。
ローカル データベース キャッシュの追加
- ローカル データベース キャッシュ テンプレートは、デスクトップ アプリケーションとは異なり、スマート デバイス プロジェクトの [新しい項目の追加] ダイアログ ボックスには表示されません。代わりに、中間層の WCF サービス プロジェクトまたは Web サービス プロジェクトにローカル データベース キャッシュを追加する必要があります。
プロジェクトにローカル データベース キャッシュを追加するには
MiddleTierServiceLibrary プロジェクトを右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[ローカル データベース キャッシュ] テンプレートをクリックし、[名前] ボックスに「NorthwindCache.sync」と入力します。
[追加] をクリックします。
NorthwindCache.sync ファイルがソリューション エクスプローラに追加され、[データ同期の構成] ダイアログ ボックスが表示されます。NorthwindCache.sync には、同期構成情報が格納されます。
同期設定の構成
サーバー データベースおよびクライアント データベースへのデータ接続を作成するには
[データ同期の構成] ダイアログ ボックスを使用し、このチュートリアルの前提条件としてインストールした Northwind データベースへの接続を作成します。これは、スマート デバイス アプリケーション外部のリモート データベースです。SQL Server Northwind データベースへの既存のサーバー接続を選択するか、接続が存在しない場合は [新規作成] をクリックし、SQL Server Northwind データベースへの新しい接続を作成することができます。
メモ : SQL Server の変更の追跡を有効にすることができるのは、リモート データベース サーバーが SQL Server 2008 データベースに接続するように構成された後だけです。詳細については、「方法 : SQL Server の変更の追跡を使用するようにデータ同期を構成する」を参照してください。
[クライアント接続] の既定値 [Northwind.sdf (新規)] をそのまま使用します。[データ同期の構成] ダイアログ ボックスでは、新しい SQL Server Compact 3.5 データベースが作成され、プロジェクトに追加されます。使用できるデータ接続オプションの詳細については、「方法 : Northwind データベースへのデータ接続を作成する」を参照してください。
サーバー接続を選択すると、[データ同期の構成] ダイアログ ボックスにより、サーバー上のリモート データベースに対して使用可能なテーブルの一覧が照会されます。また、このダイアログ ボックスでは、使用可能なテーブルの一覧を取得した後にのみ、[追加] ボタンも有効になります。
メモ : この手順が完了しても [OK] ボタンは有効になりません。これは、同期するテーブルが選択されていないためです。次のセクションでは、テーブルを追加する方法について説明します。
ローカル キャッシュ用にテーブルを追加および構成するには
[追加] をクリックして [オフライン使用のためのテーブルの構成] ダイアログ ボックスを開きます。
Customers テーブルを選択します。
メモ : [オフライン使用のためのテーブルの構成] ダイアログ ボックスで選択するテーブルごとに、同期の既定の動作を変更できます。詳細については、「方法 : アプリケーションでデータ同期を構成する」を参照してください。
列とテーブルの既定値をそのまま使用します。[OK] をクリックします。[データ同期の構成] ダイアログ ボックスにより、トラッキング列と削除された項目テーブルが作成されます。
Customers テーブルが [キャッシュされたテーブル] ボックスの一覧に追加されます。
サーバー プロジェクトとクライアント プロジェクト間で同期コンポーネントを分割するには
[データ同期の構成] ダイアログ ボックスの [詳細設定] をクリックします。
[クライアント プロジェクトの場所] ドロップダウン メニューの [OCSDeviceApp] を選択します。
[OK] をクリックします。
データ同期が構成されると、コンポーネントはクライアント プロジェクトとサーバー プロジェクト間で分割されます。その間、[SQL スクリプト生成] ダイアログ ボックスが表示されます。既定では、サーバー データベースで削除または更新された項目について追跡する列とテーブルを保持するスクリプトを生成します。
[OK] をクリックします。
生成された SQL スクリプトはサーバー プロジェクトに保存されます。Northwind.sdf クライアント データベースは、クライアント プロジェクトに作成され、サーバー データベースと初めて同期されます。
データ ソース構成ウィザードが表示されたら、Customers テーブルを選択します。
[完了] をクリックします。
NorthwindDataSet.xsd がクライアント プロジェクトに追加され、すべてのダイアログ ボックスが閉じます。
これで同期が構成されたので、次の項目がクライアント プロジェクトに追加されます。
項目 |
説明 |
---|---|
Northwind.sdf |
|
NorthwindCache.Client.sync |
|
NorthwindCache.Client.Designer.cs (または .vb) |
クライアント同期プロバイダと同期エージェントの定義が含まれているコード ファイル。ローカル データベースの同期テーブルも含まれています。詳細については、「Architecture and Classes for Client and Server Synchronization」を参照してください。 |
NorthwindDataSet.xsd |
|
References\Microsoft.Synchronization.Data References\Microsoft.Synchronization.Data.SqlServerCe |
Microsoft Synchronization Services for ADO.NET への必要な参照。 |
サーバー プロジェクトには次の項目が追加されます。
項目 |
説明 |
---|---|
NorthwindCache.sync |
同期構成情報が含まれている XML ファイル。[データ同期の構成] ダイアログ ボックスを開くには、このファイルをダブルクリックします。 |
NorthwindCache.Designer.cs (または .vb) |
サーバー データベース用のサーバー同期プロバイダと同期アダプタの定義が含まれています。詳細については、「Architecture and Classes for Client and Server Synchronization」を参照してください。 |
NorthwindCache.SyncContract.cs (または .vb) |
WCF コントラクトの定義とその実装が含まれているコード ファイル。 |
SQLScripts フォルダ |
スクリプトのフォルダ。このフォルダに含まれているスクリプトは、サーバーでのデータベースの変更を追跡する際に使用されます。このフォルダ内のスクリプトには、トラッキング列と削除された項目テーブルを作成するものがあります。また、サーバーでの変更を追跡するトリガを作成するものもあります。
メモ :
SQL スクリプトが作成されるのは、サーバーで変更が必要な場合のみです。削除された項目テーブルおよびトラッキング列が既にサーバーにある場合は、スクリプトは作成されません。
|
SQLUndoScripts フォルダ |
このフォルダ内のスクリプトは、トラッキング列、項目テーブル、およびサーバーでのデータベースへの変更を追跡して応答するためのすべてのトリガを削除します。[データ同期の構成] ダイアログ ボックスでデータベースに対して行われた変更を元に戻すには、これらのスクリプトを使用します。
メモ :
SQL スクリプトが作成されるのは、サーバーで変更が必要な場合のみです。削除された項目テーブルおよびトラッキング列が既にサーバーにある場合は、スクリプトは作成されません。
|
References\Microsoft.Synchronization.Data References\Microsoft.Synchronization.Data.Server |
Microsoft Synchronization Services for ADO.NET への必要な参照。 |
WCF サービスの構成および開始
[データ同期の構成] ダイアログ ボックスによって生成される WCF サービス (NorthwindCacheSyncService) を構成するには
ソリューション エクスプローラで NorthwindCache.SyncContract.cs (または .vb) をダブルクリックし、コード エディタでファイルを開きます。
INorthwindSyncContract 定義の直前に、XmlSerializerFormat() 属性を追加します。コード エディタには、次のように表示されます。
[ServiceContractAttribute()] [XmlSerializerFormat()] public interface INorthwindCacheSyncContract { <ServiceContractAttribute()> _ <XmlSerializerFormat()> _ Public Interface INorthwindCacheSyncContract
ソリューション エクスプローラで、[App.config] をダブルクリックします。
App.config ファイルの XML を次のように変更します。これらの変更により、WCF プロジェクト テンプレートによって生成される既定のサービス (Service1) ではなく、[データ同期の構成] ダイアログ ボックスによって生成された NorthwindCacheSyncService をホストするようプロジェクトが構成されます。
<service name="MiddleTierServiceLibrary.Service1" behaviorConfiguration="MiddleTierServiceLibrary.Service1Behavior"> を <service name="MiddleTierServiceLibrary.NorthwindCacheSyncService" behaviorConfiguration="MiddleTierServiceLibrary.NorthwindCacheSyncServiceBehavior"> に変更します。
<add baseAddress="https://localhost:8731/Design_Time_Addresses/MiddleTierServiceLibrary/Service1/" /> を <add baseAddress="http://<your computer name>:8731/NorthwindCacheSyncService/" /> に変更します。
<endpoint address="" binding="wsHttpBinding" contract="MiddleTierServiceLibrary.IService1"> を <endpoint address="" binding="basicHttpBinding" contract="MiddleTierServiceLibrary. INorthwindCacheSyncContract"> に変更します。
メモ : wsHttpBinding は、デバイスではサポートされていません。
<dns value="localhost"/> を <dns value="<your computer name>"/> に変更します。
<behavior name="MiddleTierServiceLibrary.Service1Behavior"> を <behavior name="MiddleTierServiceLibrary.NorthwindCacheSyncServiceBehavior"> に変更します。
ソリューション エクスプローラで MiddleTierServiceLibrary を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
WCF サービスを開始するには、[デバッグ] メニューの [デバッグなしで開始] をクリックします。
[OCSDeviceApp の配置] ダイアログ ボックスが表示されます。
[キャンセル] をクリックし、[はい] をクリックして続行します。
メモ : WCF サービスを開始しているだけです。デバイス エミュレータはまだ必要ありません。
WCF サービス ホストが開始され (通知領域にアイコンが表示されます)、サービスをホストします。[WCF テスト クライアント] が表示され、サービスをテストできるようになります。
スマート デバイス アプリケーションの同期機能のコーディング
前の手順では、データ同期オプションを構成しました。さらに、スマート デバイス アプリケーションに同期機能を追加する必要があります。
プロジェクトから WCF サービスへの Web 参照の追加
ソリューション エクスプローラで、OCSDeviceApp を右クリックし、[Web 参照の追加] をクリックします。
[Web 参照の追加] ダイアログ ボックスが表示されます。
[URL] ボックスに NorthwindCacheSyncService のアドレスを入力し、[移動] をクリックします。
NorthwindCacheSyncService Web サービスが見つかると、[参照の追加] ボタンが有効になります。
メモ : サービスのアドレスは App.config ファイルで見つかる場合があります。
Web 参照に「NorthwindCacheWebRef」という名前を付け、[参照の追加] をクリックします。
ソリューション エクスプローラの [Web 参照] の下に NorthwindCacheWebRef が表示されます。Visual Studio では Reference.cs ファイルが生成されます。ただし、このファイルは、ソリューション エクスプローラに表示することはできません。
次の手順を実行し、Reference.cs を開いて変更します。
[NorthwindCacheWebRef] をダブルクリックし、オブジェクト ブラウザで開きます。
OCSDeviceApp.NorthwindCacheWebRef ノードを展開します。
NorthwindCacheSyncService を右クリックし、[定義へ移動] をクリックします。
Reference.cs がコード エディタで開きます。
次のコードを最後の using ステートメントまたは Imports ステートメントの後に追加します。
[C#]
using Microsoft.Synchronization; using Microsoft.Synchronization.Data;
[Visual Basic]
Imports Microsoft.Synchronization.Data Imports Microsoft.Synchronization
ファイル内のクラスと列挙体を NorthwindCacheSyncService を除いてすべて削除します。
メモ : 削除された型は、新しくインポートされた Microsoft.Synchronization 名前空間と Microsoft.Synchronization.Data 名前空間で既に定義されています。
データの表示や同期の開始に使用するデータ バインド フォームを作成するには
ソリューション エクスプローラで Form1 をダブルクリックし、Visual Studio デザイナで開きます。
[データ ソース] ウィンドウから [Form1] に [Customers] ノードをドラッグします。
[Form1] で左側のメニュー項目をクリックし、「同期」と入力します。その Name プロパティを「SynchronizeMenuItem」に設定します。
メモ : |
---|
最終的に、ユーザーは、[同期] をクリックして同期処理を開始します。 |
DataGridView には、ローカル データベース キャッシュ (プロジェクト内にある Northwind.sdf データベース) の Customers テーブルが表示されます。
ローカルの Northwind データベースに顧客を追加するには
ソリューション エクスプローラで、Form1 をダブルクリックしてデザイナで開きます。
フォームの右側にあるメニュー項目をクリックし、「行の挿入」と入力します。メニュー項目の Name プロパティを「InsertRowMenuItem」に設定します。
[行の挿入] ボタンをダブルクリックしてメニュー クリック イベント ハンドラを作成し、コード エディタでフォームを開きます。
ローカル SQL Server Compact データベースに接続する (および行を挿入する) ためのコードを追加します。
Dim conn = New System.Data.SqlServerCe.SqlCeConnection( _ "Data Source=" + (System.IO.Path.Combine(System.IO.Path.GetDirectoryName( _ System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), "Northwind.sdf") + _ ";Max Database Size=2047")) Try ' Connect to the local database conn.Open() ' Insert a row Dim cmd = conn.CreateCommand() cmd.CommandText = "INSERT INTO Customers ([CustomerID], [CompanyName]) Values('NEWRW', 'Northwind Traders')" cmd.ExecuteNonQuery() Catch ex As Exception Finally conn.Close() End Try ' Reload the DataSet/Datagrid from the local database CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
System.Data.SqlServerCe.SqlCeConnection conn = new System.Data.SqlServerCe.SqlCeConnection( ("Data Source=" + (System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), "Northwind.sdf") + ";Max Database Size=2047"))); try { // Connect to the local database conn.Open(); System.Data.SqlServerCe.SqlCeCommand cmd = conn.CreateCommand(); // Insert a row cmd.CommandText = "INSERT INTO Customers ([CustomerID], [CompanyName]) Values('NEWRW', 'Northwind Traders')"; cmd.ExecuteNonQuery(); } finally { conn.Close(); } // Reload the DataSet/Datagrid from the local database customersTableAdapter.Fill(northwindDataSet.Customers);
InsertRowMenuItem によって、ローカル データベースの Customers テーブルに新しい行が挿入されます。
メモ : 後でアプリケーションをテストする際に、同期後に新しい行がリモート データベースに表示されることを確認できます。
アプリケーションのテスト
アプリケーションをテストするには、対象のデバイス エミュレータを接続およびクレードル接続し、NorthwindCacheSyncService サービスに接続できるようにしておく必要があります。
アプリケーションをテストするには
[ツール] メニューの [デバイス エミュレータ マネージャ] (DEM) をクリックします。
DEM ウィンドウに、使用できるエミュレータの一覧が表示されます。
[JPN Windows Mobile 5.0 Pocket PC R2 Emulator] (OCSWalkthrough の対象デバイス) を右クリックし、[接続] をクリックします。
[Pocket PC - WM 5.0] デバイス エミュレータが表示されます。
DEM ウィンドウで、接続先のデバイスを右クリックし、[クレードルに接続] をクリックします。
Windows Mobile Device Center (Windows Vista) または ActiveSync が、クレードルに接続されたデバイス エミュレータに接続されます。Windows Mobile Device Center または ActiveSync によってデバイスをセットアップするかどうかを確認するメッセージが表示された場合は、[デバイスをセットアップしないで接続] (Windows Vista) または [キャンセル] をクリックします。
メモ : WMDC または ActiveSync に接続すると、エミュレータから、デスクトップ コンピュータで実行されている NorthwindCacheSyncService にアクセスできるようになります。デバイス エミュレータから接続するには、WMDC または ActiveSync の接続設定を DMA 接続を許可するように構成する必要があります。
ソリューション エクスプローラで OCSDeviceApp を右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
F5 キーを押してデバッグします。
[Pocket PC - WM 5.0] デバイス エミュレータのフォームに戻り、[行の挿入] をクリックします。ローカル データベースとリモート データベースは同期されなくなります。ただし、データグリッドに新しい行が表示されます。
[同期] をクリックします。
デバイス エミュレータで実行しているアプリケーションで、サーバー エクスプローラまたはデータベース エクスプローラ (または他のデータベース管理ツール) を使用してリモート サーバー データベースに接続し、新しいレコードが存在することを確認します。
サーバー エクスプローラまたはデータベース エクスプローラで、リモート データベース サーバー (Northwind.sdf への接続ではありません) 上の Customers テーブルを探します。
Customers テーブルを右クリックし、[テーブル データの表示] をクリックします。
新しい行が存在することを確認します。
新しい行を右クリックし、[削除] をクリックします。データベースは再び同期されなくなります。
デバイス エミュレータのフォームに戻り、[同期] をクリックします。
リモート データベースへの変更がローカル データベースと同期され、グリッドに表示されることを検証します。
フォームを閉じます (デバッグを停止します)。
参照
処理手順
概念
SQL Server Compact 3.5 データベース (デバイス) の使用
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2008 年 7 月 |
トピックを追加 |
SP1 機能変更 |