演练:创建偶尔连接的智能设备应用程序

更新: 2008 年 7 月

本演练提供在偶尔连接的智能设备应用程序中配置数据同步的分步说明。示例应用程序在本地数据库缓存中添加一个客户,并将相关的更改与远程数据库进行同步。该应用程序还在一个 Windows 窗体上显示客户数据:从而让您验证同步是否成功。

在本演练中,您将执行以下步骤:

  • 创建一个新的智能设备应用程序。

  • 添加一个新的 Window Communication Foundation (WCF) 服务库,该服务库用作本地数据库缓存与远程数据库之间的中间层。

    说明:

    因为 Synchronization Services for ADO.NET(设备)不支持直接的两层同步,所以必须使用该中间层服务库。

  • 向项目中添加新的“本地数据库缓存”。

  • 配置同步设置。

  • 配置并启动 WCF 服务。

  • 为设备应用程序添加同步功能。

  • 测试应用程序。

先决条件

若要完成本演练,您必须:

创建智能设备应用程序

说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

在台式计算机上创建新项目

  1. 从“文件”菜单创建一个使用 Visual Basic 或 Visual C# 的新项目。

    说明:

    Visual Basic 和 C# 项目中支持“配置数据同步”对话框。因此,请务必选择这两种语言之一。

  2. 将解决方案命名为“演练”,并将项目命名为“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 数据库。有关更多信息,请参见如何:将数据同步配置为使用 SQL Server 更改跟踪

  2. 接受“客户端连接”的“Northwind.sdf (新建)”默认值。“配置数据同步”对话框会创建一个新的 SQL Server Compact 3.5 数据库,并将该数据库添加到项目中。有关可用的数据连接选项的更多信息,请参见如何:创建到 Northwind 数据库的数据连接

    选择了服务器连接之后,“配置数据同步”对话框就会在服务器上的远程数据库中查询可用表的列表。此对话框还会启用“添加”按钮,但前提是已经检索到可用表的列表。

    说明:

    请注意,在本步骤结束时,并未启用“确定”按钮。这是因为尚未选择用于同步的表。下一节将介绍如何添加表。

添加并配置用于本地缓存的表

  1. 单击“添加”以打开“配置供脱机使用的表”对话框。

  2. 选择“Customers”表。

    说明:

    可以为在“配置供脱机使用的表”对话框中选择的每个表修改默认同步行为。有关更多信息,请参见如何:在应用程序中配置数据同步

  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)

一个代码文件,包含客户端同步提供程序和同步代理的定义。还包含本地数据库的同步表。有关更多信息,请参见 Architecture and Classes for Client and Server Synchronization(用于客户端与服务器同步的体系结构和类)。

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)

包含用于服务器数据库的服务器同步提供程序和同步适配器的定义。有关更多信息,请参见 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)

  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 测试客户端”会出现,使您可以测试服务。

为智能设备应用程序中的同步功能编写代码

上述步骤配置了数据同步选项。此外,还必须在智能设备应用程序中添加同步功能。

从项目添加对 WCF 服务的 Web 引用

  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 Emulator”(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. 在服务器资源管理器/数据库资源管理器中,查找远程数据库服务器(不是到 Northwind.sdf 的连接)上的 Customers 表。

    2. 右击 Customers 表,然后单击“显示表数据”。

    3. 验证新行是否存在。

    4. 右击该新行,然后单击“删除”。数据库将再次变得不同步。

  9. 返回到设备仿真程序中的窗体,然后单击“立即同步”。

  10. 验证对远程数据库的修改是否已同步到本地数据库并显示在网格中。

  11. 关闭窗体。(停止调试。)

请参见

任务

如何:在应用程序中配置数据同步

概念

偶尔连接的应用程序(设备)

使用 SQL Server Compact 3.5 数据库(设备)

偶尔连接的应用程序概述

修订记录

日期

修订记录

原因

2008 年 7 月

新增主题。

SP1 功能更改。