逐步解說:建立偶爾連接的智慧型裝置應用程式
更新: 2008 年 7 月
本逐步解說提供逐步指示,說明如何設定偶爾連接的智慧型裝置應用程式的資料同步處理。範例應用程式會在本機資料庫快取中加入客戶,再與遠端資料庫同步處理這項變更。並且也會在 Windows Form 中顯示客戶資料:這樣可以讓您驗證同步處理作業是否成功。
在這個逐步解說中,您將會依照下列步驟進行:
建立新的智慧型裝置應用程式。
加入新的 Window Communication Foundation (WCF) 服務庫做為本機資料庫快取和遠端資料庫間的中介層 (Middle Tier)。
注意事項:
因為 Synchronization Services for ADO.NET (裝置) 不支援直接的 2 層同步處理,所以必須要有中介層服務庫。
將新的 [本機資料庫快取] 加入至專案。
設定同步處理設定值。
設定並啟動 WCF 服務。
將同步處理功能加入至裝置應用程式。
測試應用程式。
必要條件
若要完成這個逐步解說,您必須:
在 Microsoft SQL Server 或 Microsoft SQL Server Express Edition 資料庫中安裝 Northwind 範例資料庫。裝置模擬器上的本機資料庫快取將與這個資料庫進行同步處理。如需詳細資訊,請參閱 HOW TO:安裝範例資料庫。
安裝 Windows Mobile 裝置中心 (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。
按一下 [專案類型] 下的 [智慧型裝置],然後按一下 [智慧型裝置專案] 範本。
按一下 [確定]。
[加入新的智慧型裝置專案] 對話方塊隨即出現。預設會選取 Windows Mobile 5.0 Pocket PC SDK 目標作業系統、.NET Compact Framework 3.5 版和裝置應用程式範本。
按一下 [確定]。
隨即建立 OCSDeviceApp 專案,並將其加入至 [方案總管]。
建立 WCF 服務
智慧型裝置專案跟桌面應用程式不同的是,本機 SQL Server Compact 資料庫快取不能直接與遠端 SQL Server 資料庫進行同步處理。您必須建立 WCF 服務庫做為兩個資料庫間的中介層。裝置應用程式會使用 WCF 服務所公開的服務進行同步處理。
若要在方案中加入 WCF 服務庫
從 [檔案] 功能表,指向 [加入],然後按一下 [新增專案]。
將專案命名為 MiddleTierServiceLibrary。
按一下 [專案類型] 下的 [WCF ],接著按 [WCF 服務庫] 範本。
按一下 [確定]。
隨即建立 MiddleTierServiceLibrary 專案,並將其加入至 [方案總管]。
加入本機資料庫快取
- 智慧型裝置專案跟桌面應用程式不同的是,在 [加入新項目] 對話方塊中沒有本機資料庫快取範本。而您必須改為將本機資料庫快取加入至中介層 WCF 或 Web 服務專案。
若要將本機資料庫快取加入至專案
以滑鼠右鍵按一下 [MiddleTierServiceLibrary] 專案,指向 [加入],然後按一下 [新增項目]。
按一下 [本機資料庫快取] 範本,並在 [名稱] 方塊中輸入 NorthwindCache.sync。
然後按一下 [加入]。
NorthwindCache.sync 檔案就會加入到 [方案總管] 中,且 [設定資料同步處理] 對話方塊隨即出現。NorthwindCache.sync 會存放同步處理組態資訊。
設定同步處理設定值
若要建立伺服器和用戶端資料庫的資料連接
使用 [設定資料同步處理] 對話方塊,建立連接至您在本逐步解說必要條件中所安裝的 Northwind 資料庫。這對您的智慧型裝置應用程式而言是外部的遠端資料庫。您可以選取現有的 [伺服器連接] 連至 SQL Server Northwind 資料庫,如果沒有連接的話,請按一下 [新增] 建立連至 SQL Server Northwind 資料庫的新連接。
注意事項:
您可以啟用 SQL Server 變更追蹤,不過只有在遠端資料庫伺服器的連接是設為連接至 SQL Server 2008 資料庫後,才能啟用變更追蹤。如需詳細資訊,請參閱 HOW TO:設定資料同步處理以使用 SQL Server 變更追蹤。
接受 [用戶端連接] 的預設值 [ Northwind.sdf (新的)]。[設定資料同步處理] 對話方塊會建立新的 SQL Server Compact 3.5 資料庫,並將其加入至專案。如需可用資料連接選項的詳細資訊,請參閱 HOW TO:建立與 Northwind 資料庫的資料連線。
選取伺服器連接後,[設定資料同步處理] 對話方塊會查詢伺服器上遠端資料庫中的可用資料表清單。這個對話方塊也會啟用 [加入] 按鈕,但只有在擷取到可用資料表清單後才會啟用。
注意事項:
請注意,在這個步驟結束時尚未啟用 [確定] 按鈕。這是因為沒有針對同步處理選取任何資料表的緣故。下一節會說明如何加入資料表。
若要加入並設定本機快取用的資料表
按一下 [加入] 開啟 [設定離線使用的資料表] 對話方塊。
選取 [Customers] 資料表。
注意事項:
針對在 [設定離線使用的資料表] 對話方塊中選取的每個資料表,您可以修改預設的同步處理行為。如需詳細資訊,請參閱 HOW TO:在應用程式中設定資料同步處理。
接受預設的資料行和資料表值。按一下 [確定]。[設定資料同步處理] 對話方塊會建立追蹤資料行和已刪除項目的資料表。
[Customers] 資料表已加入至 [快取的資料表] 清單。
若要分割伺服器和用戶端專案間的同步處理元件
按一下 [設定資料同步處理] 對話方塊中的 [進階]。
在 [用戶端專案位置] 下拉式功能表上,選取 [OCSDeviceApp]。
按一下 [確定]。
在設定資料同步處理後,元件就會在用戶端專案和伺服器專案間劃分開來。同時會出現 [產生 SQL 指令碼] 對話方塊。根據預設,它所產生的指令碼會維護追蹤資料行和資料表 (用於伺服器資料庫上的已刪除和已更新項目)。
按一下 [確定]。
所產生的 SQL 指令碼會儲存在伺服器專案中。在用戶端專案中會建立 Northwind.sdf 用戶端資料庫,並會與伺服器資料庫進行首次的同步處理。
在 [資料來源組態精靈] 出現時,選取 [Customers] 資料表。
按一下 [完成]。
NorthwindDataSet.xsd 就會加入至用戶端專案中,並關閉所有對話方塊。
現在已經完成同步處理的設定,並會在用戶端專案中加入下列項目:
項目 |
說明 |
---|---|
Northwind.sdf |
|
NorthwindCache.Client.sync |
|
NorthwindCache.Client.Designer.cs (或 .vb) |
包含用戶端同步提供者和同步代理程式之定義的程式碼檔案。其中也包含本機資料庫的同步資料表。如需詳細資訊,請參閱用戶端和伺服器同步處理的架構和類別 (英文)。 |
NorthwindDataSet.xsd |
|
References\Microsoft.Synchronization.Data References\Microsoft.Synchronization.Data.SqlServerCe |
Microsoft Synchronization Services for ADO.NET 的必要參考。 |
而會在伺服器專案中加入下列項目:
項目 |
說明 |
||
---|---|---|---|
NorthwindCache.sync |
包含同步處理組態資訊的 XML 檔案。按兩下這個檔案即可開啟 [設定資料同步處理] 對話方塊。 |
||
NorthwindCache.Designer.cs (或 .vb) |
包含伺服器資料庫之伺服器同步提供者和同步配接器的定義。如需詳細資訊,請參閱用戶端和伺服器同步處理的架構和類別 (英文)。 |
||
NorthwindCache.SyncContract.cs (或 .vb) |
包含 WCF 合約定義和實作的程式碼檔案。 |
||
SQLScripts 資料夾 |
指令碼的資料夾。這個資料夾中的指令碼是用於追蹤伺服器上的資料庫變更。這個資料夾中的某些指令碼會建立追蹤資料行、已刪除項目資料表。這個資料夾中的其他指令碼,則會建立追蹤伺服器變更的觸發程序 (Trigger)。
|
||
SQLUndoScripts 資料夾 |
這個資料夾中的指令碼會刪除追蹤資料行、項目資料表,以及任何用於追蹤和回應伺服器資料庫變更的觸發程序。使用這些指令碼可以復原 [設定資料同步處理] 對話方塊對資料庫所進行的變更。
|
||
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 修改。這些變更會設定專案來裝載由 [設定資料同步處理] 對話方塊所產生的 NorthwindCacheSyncService,而不是裝載由 WCF 專案範本所產生的預設服務 (Service1)。
將 <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 測試用戶端] 隨即出現,並讓您可以測試服務。
撰寫智慧型裝置應用程式的同步處理功能程式碼
前述步驟會設定您的資料同步處理選項。除此之外,您必須將同步處理功能加入至智慧型裝置應用程式中。
從專案將 Web 參考加入到 WCF 服務
以滑鼠右鍵按一下 [方案總管] 中的 [OCSDeviceApp],然後按一下 [加入 Web 參考]。
[加入 Web 參考] 對話方塊隨即出現。
在 [URL] 方塊中輸入 NorthwindCacheSyncService 的位址,然後按一下 [移至]。
一旦找到 NorthwindCacheSyncService Web 服務,就會啟用 [加入參考] 按鈕。
注意事項:
您可以在 App.config 檔案中找到服務位址。
將 Web 參考命名為 NorthwindCacheWebRef,然後按一下 [加入參考]。
NorthwindCacheWebRef 就會出現在 [方案總管] 中的 [Web 參考] 下方。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 設計工具中開啟該表單。
將 [Customers] 節點從 [資料來源] 視窗拖曳至 [Form1]。
按一下 [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 視窗隨即開啟並會顯示可用模擬器清單。
以滑鼠右鍵按一下 [USA Windows Mobile 5.0 Pocket PC R2 模擬器] (即 OCSWalkthrough 的目標裝置),然後按一下 [連接]。
[Pocket PC - WM 5.0] 裝置模擬器隨即出現。
以滑鼠右鍵按一下 DEM 視窗中的連接裝置,然後按一下 [連接底座]。
Windows Mobile 裝置中心 (Windows Vista) 或 ActiveSync 會連接到銜接好的裝置模擬器。如果 Windows Mobile 裝置中心或 ActiveSync 有提供裝置設定,按一下 [在不設定裝置的情況下進行連線] (Windows Vista) 或 [取消]。
注意事項:
對 WMDC 或 ActiveSync 的連接可以讓模擬器存取在桌面應用程式上執行的 NorthwindCacheSyncService。為了讓裝置模擬器可以連接,WMDC 或 ActiveSync 中的連接設定必須設為允許 DMA 連接。
以滑鼠右鍵按一下 [方案總管] 中的 [OCSDeviceApp],然後按一下 [設定為啟始專案]。
按 F5 進行偵錯。
移回 [Pocket PC - WM 5.0] 裝置模擬器的表單中,然後按一下 [插入資料列]。本機資料庫和遠端資料庫不再進行同步處理。然而在資料格中應該可以看到新的資料列。
按一下 [開始同步處理]。
從裝置模擬器中執行的應用程式,使用 [伺服器總管/資料庫總管] (或其他的資料庫管理工具) 連接到遠端伺服器資料庫,並驗證是否存在新的資料錄。
在 [伺服器總管/資料庫總管] 中,找出遠端資料庫伺服器上的 [Customers] 資料表 (不是 Northwind.sdf 的連接)。
以滑鼠右鍵按一下 [Customers] 資料表,然後按一下 [顯示資料表資料]。
驗證是否存在新的資料列。
以滑鼠右鍵按一下新的資料列,然後按一下 [刪除]。資料庫再度處於未同步處理的情況下。
移回裝置模擬器的表單中,然後按一下 [開始同步處理]。
確認遠端資料庫的修改已同步處理至本機資料庫,並顯示在方格中。
關閉表單 (停止偵錯)。
請參閱
工作
概念
使用 SQL Server Compact 3.5 資料庫 (裝置)
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2008 年 7 月 |
加入主題。 |
SP1 功能變更。 |