共用方式為


逐步解說:建立偶爾連接的智慧型裝置應用程式

更新: 2008 年 7 月

本逐步解說提供逐步指示,說明如何設定偶爾連接的智慧型裝置應用程式的資料同步處理。範例應用程式會在本機資料庫快取中加入客戶,再與遠端資料庫同步處理這項變更。並且也會在 Windows Form 中顯示客戶資料:這樣可以讓您驗證同步處理作業是否成功。

在這個逐步解說中,您將會依照下列步驟進行:

  • 建立新的智慧型裝置應用程式。

  • 加入新的 Window Communication Foundation (WCF) 服務庫做為本機資料庫快取和遠端資料庫間的中介層 (Middle Tier)。

    注意事項:

    因為 Synchronization Services for ADO.NET (裝置) 不支援直接的 2 層同步處理,所以必須要有中介層服務庫。

  • 將新的 [本機資料庫快取] 加入至專案。

  • 設定同步處理設定值。

  • 設定並啟動 WCF 服務。

  • 將同步處理功能加入至裝置應用程式。

  • 測試應用程式。

必要條件

若要完成這個逐步解說,您必須:

建立智慧型裝置應用程式

注意事項:

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

若要在桌上型電腦上建立新專案

  1. 從 [檔案] 功能表,建立使用 Visual Basic 或 Visual C# 的新專案。

    注意事項:

    Visual Basic 和 C# 專案都支援 [設定資料同步處理] 對話方塊。因此,請務必選取這兩種語言中的一個。

  2. 將方案命名為 Walkthrough,並將專案命名為 OCSDeviceApp。

  3. 按一下 [專案類型] 下的 [智慧型裝置],然後按一下 [智慧型裝置專案] 範本。

  4. 按一下 [確定]。

    [加入新的智慧型裝置專案] 對話方塊隨即出現。預設會選取 Windows Mobile 5.0 Pocket PC SDK 目標作業系統、.NET Compact Framework 3.5 版和裝置應用程式範本。

  5. 按一下 [確定]。

    隨即建立 OCSDeviceApp 專案,並將其加入至 [方案總管]。

建立 WCF 服務

智慧型裝置專案跟桌面應用程式不同的是,本機 SQL Server Compact 資料庫快取不能直接與遠端 SQL Server 資料庫進行同步處理。您必須建立 WCF 服務庫做為兩個資料庫間的中介層。裝置應用程式會使用 WCF 服務所公開的服務進行同步處理。

若要在方案中加入 WCF 服務庫

  1. 從 [檔案] 功能表,指向 [加入],然後按一下 [新增專案]。

  2. 將專案命名為 MiddleTierServiceLibrary。

  3. 按一下 [專案類型] 下的 [WCF ],接著按 [WCF 服務庫] 範本。

  4. 按一下 [確定]。

    隨即建立 MiddleTierServiceLibrary 專案,並將其加入至 [方案總管]。

加入本機資料庫快取

  • 智慧型裝置專案跟桌面應用程式不同的是,在 [加入新項目] 對話方塊中沒有本機資料庫快取範本。而您必須改為將本機資料庫快取加入至中介層 WCF 或 Web 服務專案。

若要將本機資料庫快取加入至專案

  1. 以滑鼠右鍵按一下 [MiddleTierServiceLibrary] 專案,指向 [加入],然後按一下 [新增項目]。

  2. 按一下 [本機資料庫快取] 範本,並在 [名稱] 方塊中輸入 NorthwindCache.sync。

  3. 然後按一下 [加入]。

    NorthwindCache.sync 檔案就會加入到 [方案總管] 中,且 [設定資料同步處理] 對話方塊隨即出現。NorthwindCache.sync 會存放同步處理組態資訊。

設定同步處理設定值

若要建立伺服器和用戶端資料庫的資料連接

  1. 使用 [設定資料同步處理] 對話方塊,建立連接至您在本逐步解說必要條件中所安裝的 Northwind 資料庫。這對您的智慧型裝置應用程式而言是外部的遠端資料庫。您可以選取現有的 [伺服器連接] 連至 SQL Server Northwind 資料庫,如果沒有連接的話,請按一下 [新增] 建立連至 SQL Server Northwind 資料庫的新連接。

    注意事項:

    您可以啟用 SQL Server 變更追蹤,不過只有在遠端資料庫伺服器的連接是設為連接至 SQL Server 2008 資料庫後,才能啟用變更追蹤。如需詳細資訊,請參閱 HOW TO:設定資料同步處理以使用 SQL Server 變更追蹤

  2. 接受 [用戶端連接] 的預設值 [ Northwind.sdf (新的)]。[設定資料同步處理] 對話方塊會建立新的 SQL Server Compact 3.5 資料庫,並將其加入至專案。如需可用資料連接選項的詳細資訊,請參閱 HOW TO:建立與 Northwind 資料庫的資料連線

    選取伺服器連接後,[設定資料同步處理] 對話方塊會查詢伺服器上遠端資料庫中的可用資料表清單。這個對話方塊也會啟用 [加入] 按鈕,但只有在擷取到可用資料表清單後才會啟用。

    注意事項:

    請注意,在這個步驟結束時尚未啟用 [確定] 按鈕。這是因為沒有針對同步處理選取任何資料表的緣故。下一節會說明如何加入資料表。

若要加入並設定本機快取用的資料表

  1. 按一下 [加入] 開啟 [設定離線使用的資料表] 對話方塊。

  2. 選取 [Customers] 資料表。

    注意事項:

    針對在 [設定離線使用的資料表] 對話方塊中選取的每個資料表,您可以修改預設的同步處理行為。如需詳細資訊,請參閱 HOW TO:在應用程式中設定資料同步處理

  3. 接受預設的資料行和資料表值。按一下 [確定]。[設定資料同步處理] 對話方塊會建立追蹤資料行和已刪除項目的資料表。

    [Customers] 資料表已加入至 [快取的資料表] 清單。

若要分割伺服器和用戶端專案間的同步處理元件

  1. 按一下 [設定資料同步處理] 對話方塊中的 [進階]。

  2. 在 [用戶端專案位置] 下拉式功能表上,選取 [OCSDeviceApp]。

  3. 按一下 [確定]。

    在設定資料同步處理後,元件就會在用戶端專案和伺服器專案間劃分開來。同時會出現 [產生 SQL 指令碼] 對話方塊。根據預設,它所產生的指令碼會維護追蹤資料行和資料表 (用於伺服器資料庫上的已刪除和已更新項目)。

  4. 按一下 [確定]。

    所產生的 SQL 指令碼會儲存在伺服器專案中。在用戶端專案中會建立 Northwind.sdf 用戶端資料庫,並會與伺服器資料庫進行首次的同步處理。

  5. 在 [資料來源組態精靈] 出現時,選取 [Customers] 資料表。

  6. 按一下 [完成]。

  7. NorthwindDataSet.xsd 就會加入至用戶端專案中,並關閉所有對話方塊。

現在已經完成同步處理的設定,並會在用戶端專案中加入下列項目:

項目

說明

Northwind.sdf

  • 包含來自 SQL Server 之快取資料的本機資料庫檔案。

NorthwindCache.Client.sync

  • 包含同步處理組態資訊的 XML 檔案。按兩下這個檔案即可開啟 [設定資料同步處理] 對話方塊。

NorthwindCache.Client.Designer.cs (或 .vb)

包含用戶端同步提供者和同步代理程式之定義的程式碼檔案。其中也包含本機資料庫的同步資料表。如需詳細資訊,請參閱用戶端和伺服器同步處理的架構和類別 (英文)。

NorthwindDataSet.xsd

  • [資料來源組態精靈] 所產生的具型別資料集。這個資料庫所包含的 Customers 資料表,是使用本機資料庫中儲存的資料填入的。

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)。

注意事項:

只有當伺服器需要進行修改時,才會建立 SQL 指令碼。如果伺服器已經有已刪除項目資料表和追蹤資料行,則不會建立指令碼。

SQLUndoScripts 資料夾

這個資料夾中的指令碼會刪除追蹤資料行、項目資料表,以及任何用於追蹤和回應伺服器資料庫變更的觸發程序。使用這些指令碼可以復原 [設定資料同步處理] 對話方塊對資料庫所進行的變更。

注意事項:

只有當伺服器需要進行修改時,才會建立 SQL 指令碼。如果伺服器已經有已刪除項目資料表和追蹤資料行,則不會建立指令碼。

References\Microsoft.Synchronization.Data

References\Microsoft.Synchronization.Data.Server

Microsoft Synchronization Services for ADO.NET 的必要參考。

設定並啟動 WCF 服務

若要設定由設定資料同步處理對話方塊所產生的 WCF 服務 (NorthwindCacheSyncService)

  1. 按兩下 [方案總管] 中的 [NorthwindCache.SyncContract.cs] (或 .vb),以在 [程式碼編輯器] 中開啟該檔案。

  2. 緊接在定義 INorthwindSyncContract 前,加入 XmlSerializerFormat() 屬性。[程式碼編輯器] 應顯示如下:

    [ServiceContractAttribute()]
    [XmlSerializerFormat()]
    public interface INorthwindCacheSyncContract {
    <ServiceContractAttribute()> _
    <XmlSerializerFormat()> _
    Public Interface INorthwindCacheSyncContract
    
  3. 按兩下 [方案總管] 中的 [App.config]。

  4. 對 App.config 檔案進行下列 XML 修改。這些變更會設定專案來裝載由 [設定資料同步處理] 對話方塊所產生的 NorthwindCacheSyncService,而不是裝載由 WCF 專案範本所產生的預設服務 (Service1)。

    1. 將 <service name="MiddleTierServiceLibrary.Service1" behaviorConfiguration="MiddleTierServiceLibrary.Service1Behavior"> 變更為 <service name="MiddleTierServiceLibrary.NorthwindCacheSyncService" behaviorConfiguration="MiddleTierServiceLibrary.NorthwindCacheSyncServiceBehavior">

    2. 將 <add baseAddress="https://localhost:8731/Design_Time_Addresses/MiddleTierServiceLibrary/Service1/" /> 變更為 <add baseAddress="http://<your computer name>:8731/NorthwindCacheSyncService/" />

    3. 將 <endpoint address="" binding="wsHttpBinding" contract="MiddleTierServiceLibrary.IService1"> 變更為 <endpoint address="" binding="basicHttpBinding" contract="MiddleTierServiceLibrary. INorthwindCacheSyncContract">

      注意事項:

      裝置上不支援 wsHttpBinding。

    4. 將 <dns value="localhost"/> 變更為 <dns value="<your computer name>"/>

    5. 將 <behavior name="MiddleTierServiceLibrary.Service1Behavior"> 變更為 <behavior name="MiddleTierServiceLibrary.NorthwindCacheSyncServiceBehavior">

  5. 以滑鼠右鍵按一下 [方案總管] 中的 [MiddleTierServiceLibrary],然後按一下 [設定為啟始專案]。

  6. 若要啟動 WCF 服務,按一下 [偵錯] 功能表中的 [啟動但不偵錯]。

    [部署 OCSDeviceApp] 對話方塊隨即出現。

  7. 按一下 [取消],然後按一下 [是] 繼續。

    注意事項:

    您只有啟動 WCF 服務:還沒有必要啟動裝置模擬器。

    [WCF 服務主機] 隨即啟動 (在告知區域中出現圖示) 並會裝載服務。[WCF 測試用戶端] 隨即出現,並讓您可以測試服務。

撰寫智慧型裝置應用程式的同步處理功能程式碼

前述步驟會設定您的資料同步處理選項。除此之外,您必須將同步處理功能加入至智慧型裝置應用程式中。

從專案將 Web 參考加入到 WCF 服務

  1. 以滑鼠右鍵按一下 [方案總管] 中的 [OCSDeviceApp],然後按一下 [加入 Web 參考]。

    [加入 Web 參考] 對話方塊隨即出現。

  2. 在 [URL] 方塊中輸入 NorthwindCacheSyncService 的位址,然後按一下 [移至]。

    一旦找到 NorthwindCacheSyncService Web 服務,就會啟用 [加入參考] 按鈕。

    注意事項:

    您可以在 App.config 檔案中找到服務位址。

  3. 將 Web 參考命名為 NorthwindCacheWebRef,然後按一下 [加入參考]。

    NorthwindCacheWebRef 就會出現在 [方案總管] 中的 [Web 參考] 下方。Visual Studio 會產生檔案 Reference.cs:但是您不會在 [方案總管] 中看到這個檔案。

  4. 執行下列步驟以開啟和修改 Reference.cs:

    1. 按兩下 [NorthwindCacheWebRef],以在 [物件瀏覽器] 中開啟該檔案。

    2. 展開節點 [OCSDeviceApp.NorthwindCacheWebRef]。

    3. 以滑鼠右鍵按一下 [NorthwindCacheSyncService],然後按一下 [移至定義]。

      在 [程式碼編輯器] 中就會開啟 Reference.cs。

    4. 將下列程式碼加入至最後一個 using 或 imports 陳述式的後面:

      [C#]

      using Microsoft.Synchronization;
      using Microsoft.Synchronization.Data;
      

      [Visual Basic]

      Imports Microsoft.Synchronization.Data
      Imports Microsoft.Synchronization
      
    5. 移除檔案中 NorthwindCacheSyncService 以外的所有類別和列舉型別。

      注意事項:

      在剛匯入的 Microsoft.Synchronization 和 Microsoft.Synchronization.Data 命名空間中,已經有定義所移除的型別。

若要建立用於檢視資料和啟始同步處理的資料繫結表單

  1. 按兩下 [方案總管] 中的 [Form1],以在 Visual Studio 設計工具中開啟該表單。

  2. 將 [Customers] 節點從 [資料來源] 視窗拖曳至 [Form1]。

按一下 [Form1] 中的左方功能表項目,並輸入開始同步處理。將其 Name 屬性設為 SynchronizeMenuItem。

注意事項:

使用者最後會按一下 [開始同步處理],啟動同步處理程序。

DataGridView 會顯示本機資料庫快取 (即位於專案中的 Northwind.sdf 資料庫) 的 Customers 資料表。

若要在本機 Northwind 資料庫中加入客戶

  1. 按兩下 [方案總管] 中的 [Form1],以在設計工具中開啟該表單。

  2. 按一下位於表單右方的功能表項目,並輸入插入資料列。將功能表項目的 Name 屬性設為 InsertRowMenuItem。

  3. 按兩下 [插入資料列] 按鈕,建立功能表的按一下事件處理常式,並在 [程式碼編輯器] 中開啟表單。

  4. 加入程式碼以連接至本機 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 服務。

若要測試應用程式

  1. 按一下 [工具] 功能表中的 [裝置模擬器管理員] (即 DEM)。

    DEM 視窗隨即開啟並會顯示可用模擬器清單。

  2. 以滑鼠右鍵按一下 [USA Windows Mobile 5.0 Pocket PC R2 模擬器] (即 OCSWalkthrough 的目標裝置),然後按一下 [連接]。

    [Pocket PC - WM 5.0] 裝置模擬器隨即出現。

  3. 以滑鼠右鍵按一下 DEM 視窗中的連接裝置,然後按一下 [連接底座]。

    Windows Mobile 裝置中心 (Windows Vista) 或 ActiveSync 會連接到銜接好的裝置模擬器。如果 Windows Mobile 裝置中心或 ActiveSync 有提供裝置設定,按一下 [在不設定裝置的情況下進行連線] (Windows Vista) 或 [取消]。

    注意事項:

    對 WMDC 或 ActiveSync 的連接可以讓模擬器存取在桌面應用程式上執行的 NorthwindCacheSyncService。為了讓裝置模擬器可以連接,WMDC 或 ActiveSync 中的連接設定必須設為允許 DMA 連接。

  4. 以滑鼠右鍵按一下 [方案總管] 中的 [OCSDeviceApp],然後按一下 [設定為啟始專案]。

  5. 按 F5 進行偵錯。

  6. 移回 [Pocket PC - WM 5.0] 裝置模擬器的表單中,然後按一下 [插入資料列]。本機資料庫和遠端資料庫不再進行同步處理。然而在資料格中應該可以看到新的資料列。

  7. 按一下 [開始同步處理]。

  8. 從裝置模擬器中執行的應用程式,使用 [伺服器總管/資料庫總管] (或其他的資料庫管理工具) 連接到遠端伺服器資料庫,並驗證是否存在新的資料錄。

    1. 在 [伺服器總管/資料庫總管] 中,找出遠端資料庫伺服器上的 [Customers] 資料表 (不是 Northwind.sdf 的連接)。

    2. 以滑鼠右鍵按一下 [Customers] 資料表,然後按一下 [顯示資料表資料]。

    3. 驗證是否存在新的資料列。

    4. 以滑鼠右鍵按一下新的資料列,然後按一下 [刪除]。資料庫再度處於未同步處理的情況下。

  9. 移回裝置模擬器的表單中,然後按一下 [開始同步處理]。

  10. 確認遠端資料庫的修改已同步處理至本機資料庫,並顯示在方格中。

  11. 關閉表單 (停止偵錯)。

請參閱

工作

HOW TO:在應用程式中設定資料同步處理

概念

偶爾連接的應用程式 (裝置)

使用 SQL Server Compact 3.5 資料庫 (裝置)

偶爾連接的應用程式概觀

變更記錄

日期

記錄

原因

2008 年 7 月

加入主題。

SP1 功能變更。