|
手持设备和其他便携式设备所附带的功能不断增加。现在,这些设备可以利用 Wi-Fi 和手机内置的无线调制解调器,通过专用网络和 Internet 进行通信。手持设备并不仅限于在个人用户中使用,许多商业领域也都在利用它们所提供的移动功能。人们希望便携功能更加完善,而这种需求的增加意味着对移动应用程序需求也在增加。举例来说,需要应用程序能让员工从字段更新商品目录、输入订单、更新顾客信息以及执行其他以数据为中心的任务。 在本专栏中,我将开发一个可以查看和更新商品目录的移动应用程序。 应用程序要以手持 Windows 为目标吗?是基于 CE 还是 Microsoft?Windows Powered Pocket PC 设备可以作为独立的应用程序操作,也可以作为企业范围的应用程序的一部分。Visual Studio 中含有 Microsoft .NET Compact Framework,我是否要使用它?为 Pocket PC 设备开发应用程序的 .NET 2003。此应用程序中的一个关键要素是:产品的完整目录可否同步,并存储在手持设备上 SQL Server?CE 的一个实例中。 Pocket PC 设备中的 SQL Server CE 数据库包含 Northwind 数据库的一个复制版本,后者来自后端 SQL Server 数据库。由于数据库存在于两个地方,为了维护两个数据库数据的完整性,我将会使用 SQL Server 的合并复制功能。 首先我来解释如何进行合并复制方案的前提条件,包括可对其进行自定义的几种方式。讨论完如何配置环境之后,将介绍应用程序如何运行和利用 SQL Server CE 和 ADO.NET 的断开连接功能。因为在任何应用程序中,异常处理都是很重要的。但是,在开发移动设备时,不仅需要强有力的异常处理,而且需要量是非常巨大的。最后,我将介绍如何捕获手持设备和后端数据库之间可能发生的各种错误,以及如何报告错误。 配置
使用手持设备上的 .NET Compact Framework 和 SQL Server CE 开发应用程序需要一些前提条件,在进行之前,理解这些前提条件是很重要的。.NET Compact Framework 和 SQL Server CE 设备组件现在安装了 Visual Studio .NET 2003。SQL Server CE 服务器组件可以从 Microsoft 网站随着任何 service pack 一起下载,强烈建议您安装此组件。安装好 .NET Compact Framework、SQL Server CE 和最新版本的 SQL Server 和 SQL Server CE service pack 之后,您就可以进行下一步工作了。 虽然安装很简单,但配置合并复制却需要格外注意。在设计应用程序时,以下这点很重要:回顾各个步骤,看看各个移动部件之间是如何交互的。例如,一个简单但容易被忽视的步骤是确保 SQL Server 和 SQL Server Agent 服务同时在后端服务器运行。在样本库存应用程序中,后端 SQL Server 实例中的 Northwind 数据库是中心数据存储,它包含产品、订单和顾客在内的所有信息。应用程序允许手持设备存储来自 Northwind 数据库(位于后端数据库服务器)的库存信息。两个数据库通过合并复制进程进行通信,此进程使用 SQL Server CE Server Agent 来回传递信息。 SQL Server CE Server Agent
SQL Server CE Server Agent 是一个 ISAPI DLL,它是在 Microsoft Internet 信息服务 (IIS) 下的虚拟目录中建立的。实质上,它使用 HTTP 协议传递消息,从而使得两个数据库可以相互通信。要想设置 SQL Server CE Server Agent,最简单的方法是使用 SQL Server CE 虚拟目录创建向导。更高级的方法是手动设置。我在服务器上创建一个文件夹“C:\Projects\SQLCE”,并将 SQL Server CE 安装文件夹(位于 \Program Files\Microsoft SQL Server CE 2.0\Server 下)中的代理 DLL (sscesa20.dll) 复制到此文件夹,然后在那里注册它。然后运用 HTTP 执行权利创建一个虚拟目录(名为 SQLCE),并将其指向 SQL Server CE Server Agent 的新内容文件夹位置。 当计划通过 SQL Server CE Server Agent 实现合并复制时,在 NTFS 文件夹和虚拟目录中都建立合适的权限是很重要的。NTFS 文件夹权限和虚拟目录都应该允许手持应用程序访问此代理。您不应该允许匿名身份验证模式,但在我的示例中,为了简单起见,我允许匿名用户通过 IUSR_machine name 帐户访问虚拟目录。因为在合并复制同步时,会对文件执行写操作,所以我也赋予 IUSR_machine name 帐户对此文件夹的写访问权限。再次强调一下,示例应用程序允许匿名访问,但在实际的应用程序中,应该使用更加安全的身份验证方法。有关连接性和安全性的更多信息,请参阅 Configuring Security for Connectivity。 复制发布
一旦 SQL Server 和 SQL Server CE 实例实现相互通信的机制建立之后,还需要某些东西才能让它们真正能够交流。起初,必须在 SQL Server 后端创建发布来定义合并复制进程的参数。发布定义了可用的数据,以及如果解决任何可能存在的复制冲突。发布访问列表定义允许谁进行订阅。用于订阅的身份验证类型是由 SQL Server 配置定义的。发布可以通过启动创建发布向导来创建;右键单击一个数据库,然后从弹出菜单中选择 New | Publication 即可访问此向导。向导的大多数选项都是很直观的,所以可以专注于一些比较重要的设置。 可以创建的有三种发布类型:快照、事务性的和合并(请参见 图 1)。由于库存应用程序必须允许后端数据库或手持设备的数据库更新数据并相互同步,所以,对于账单使用合并发布最为合适。另外,合并发布是 SQL Server CE 唯一支持的复制形式。  图 1 三种发布类型
向导的下一步指明允许什么类型的订户订阅发布。请确保至少选择“Devices running SQL Server CE”。在此必须指明要发布哪些文章。文章可以是表、视图,甚至是存储过程。在此示例应用程序中,为简单起见,我选择发布所有信息;然而,由于我只打算让手持设备使用与库存相关的信息,所以部分表就已足够。
将发布设置为使用合并复制的一个副作用是:所有选择要发布的文章,如果在 ROWGUIDCOL 属性集中没有唯一约束或主键约束,都会添加一个称为 rowguid 的附加列。当获得发布的第一个快照时,会随 rowguid 列添加一个索引(由类型唯一标识符定义)。在文章中,会自动为新行生成唯一标识符值。唯一标识符值用于将后端数据库的文章的行链接到 SQL Server CE 文章的行上。 发布也可以纵向筛选文章(限制文章中的列)或横向筛选文章(限制文章中的行)。这可以通过设置创建发布向导或设置发布的属性来实现。对于此示例应用程序,我没有创建任何筛选器,而是指定所有表都是已发布的文章。一旦向导完成,它就可以创建发布。 当发布创建后,SQL Server 也在幕后创建其他几个对象来支持复制进程。例如,对所有已发布的文章创建触发器,它可以跟踪服务器上文章所做的更改。更改通过视图发送给 MSmerge_contents 和 MSmerge_tombstone 表,它们同样也是由发布创建的。插入和更新在 MSmerge_contents 表中跟踪,而删除则在 MSmerge_tombstone 表中跟踪。这些视图、触发器和表的创建是为了支持由发布定义的复制进程。SQL Server CE 使用的进程与此类似。 一旦创建好发布后(我将它命名为 NorthwindPub),就可以通过发布访问列表来指定可以访问发布的 SQL Server 帐户了。对于我的示例,我创建了一个名为 SqlTestUser 的 SQL Server 登录,并授予它访问 Northwind 数据库的权限。然后,转到 NorthwindPub 发布的属性中的Publication Access List 选项卡。在此,我将 SqlTestUser 添加到可以访问发布的可用帐户列表中(参见图 2)。  图 2 Northwind 发布属性
最后一个步骤是创建第一个快照。在新订户接受更改之前,它必须包含所有表和发布的已定义文章中包含的所有数据。这意味着当您第一次创建快照,然后复制给订户时,所有数据库表都会创建并填充到订户的数据库中(此例中是 SQL Server CE 数据库)。在后面的同步中,发布者和订户数据库之间只会发送修改内容。
一旦设置好 SQL Server CE Server Agent,就创建了发布,定义了所有身份验证类型并建立了初始快照,这样,复制过程就可以开始了。现在,我需要的就仅仅是一个订户了。请进入示例库存应用程序。 应用程序
此库存应用程序是一个用 C# 编写的智能设备应用程序。由于我有一个 Pocket PC,所以我想让应用程序适用于此 Pocket PC 设备,但使之适用于更多基于 Windows CE 的通用设备选项也很容易。应用程序的基本要求包括使 Northwind 后端数据库的库存数据与手持设备同步。当选择一件商品时,其价格和库存级别都会显示在文本框中,所以用户可以编辑。 使用 .NET Compact Framework 进行开发的一个很大的好处是您不需要针对基于 Windows CE 的设备进行开发。相反,您可以使用 Pocket PC 模拟器来开发和调试。此专栏显示的图片是在模拟器调试模式下的应用程序。  图 3 同步结果
应用程序启动时,它会去查看 Northwind 数据库是否存在于 SQL Server CE 实例中。应用程序第一次运行时,数据还未被复制到 SQL Server CE,所以输入框是空的。当用户按下 Synch 按钮,应用程序会启动合并复制进程,将 NorthwindPub 发布的首个快照传递过来。由于首个快照包含所有的 Northwind 数据,所以它会比后面的同步慢。一旦发布对订户进行了发布,就会弹出一个消息框来显示同步结果(参见图 3)。将显示初始快照中发布者更改的行数,以及发布者与零订户更改的零冲突。首次同步还会在基于 Windows CE 的设备中创建 SQL Server CE 数据库文件来存储 Northwind 数据。  图 4 显示的数据
一旦创建了数据库,应用程序就会在组合框控件中显示类别列表。图 4 显示了在 Beverages 类别中如何选择 Chai 产品以及显示 Chai 产品的库存级别和单价。此处,用户可以浏览和/或编辑其他类别的产品。当用户更改库存级别后,数据就会保存到本地数据集中。一般来说,数据集在同步之后从本地 SQL Server CE 数据库加载。然后数据集会绑定到产品的控件上,并跟踪用户所作的任何数据更改。
 图 5 更改库存值
一旦用户按下 Save 按钮,所有更改都会利用 ADO.NET 发送到本地 SQL Server CE 数据库。存储在数据集中的更改也会通过 SqlCeDataAdapter 的 Update 方法发送到数据库。接下来,如果用户按下 Synch 按钮,对本地 SQL Server CE 数据库(订户数据库)进行的更改就发会送到后端数据库(发布者数据库),如果发布者数据库也进行过更改,则更改也会通过合并复制发送到订户数据库。图 5 显示了用户更改一个库存值,但后端数据库没有数据更改的结果。
代码 要使之生效,编码时还需要在项目中包含几个命名空间。智能设备应用程序需要的基本命名空间是 System、System.Drawing、System.Collections、System.ComponentModel 和 System.Windows.Forms。 包含的其他几个命名空间是用于将数据库文件写入手持设备、与 SQL Server CE 数据库通信,以及在数据集中存储产品数据。因此,本项目还需要以下命名空间:
using System.Data.SqlServerCe; using System.Data; using System.Data.Common; using System.Text; using System.Xml;
|
|
|
|
|
|
标签NewsAbout错误:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
|
|
|
|