• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > 基于Pocket PC的分布式程序设计

基于Pocket PC的分布式程序设计

录入:edatop.com    点击:

  所谓分布式程序设计,简单地说就是把整个系统设计成两部分或多部分,而在子系统之间实现信息的有效利用和综合控制。本文以分布式的MIS为例,介绍实现Pocket PC 与PC之间的分布式MIS系统的原理,并详细介绍了进行分布式设计的主要方法。在本文的例子中,整个系统设计成两部分:服务器端和客户端,而客户端能与服务器端进行数据或命令的实时交互。以警察检查某人是否为网上通缉犯为例,我们可以把大量的数据放在服务器上的SQL Server 2000数据库中,而警察携带的Pocket PC上只放一部分最常用的数据,在检查时先与Pocket PC上的数据进行核对,如需要再实时地和SQL Server 2000数据库中数据进行核对,而且Pocket PC与PC之间可以进行数据的实时更新(如及时上传/下载新数据)或传送命令,使Pocket PC成为SQL Server 2000数据库的一个终端,充分发挥其“移动数据随时存储、随时查询更新” 的功能。显然笔记本电脑不如Pocket PC携带使用方便,因此我们研究分析了基于Pocket PC的分布式MIS的实现原理并用实际例子加以说明。顺便指出,这里的方法与代码完全可以方便的移植到笔记本电脑或台式机上。

  我们的例子是实现一个分布式的进行项目管理的信息系统,主要分为三个部分:本地项目管理、RDA远程管理、复制同步信息。本地项目管理是用来管理本地的项目信息,包括本地表的建立,项目信息的添加、删除、修改、查询等操作;RDA远程管理是通过RDA方法来与远程PC上的SQL Server数据库服务器进行数据的实时同步;复制同步信息是通过复制的方法使本地的项目信息与远程的SQL Server数据库服务器项目信息达到一致。系统通过这三个功能模块来实现项目的分布式管理。

  下面先介绍SQL Server for CE和ADOCE。

  1. Pocket PC 与SQL Server for CE介绍

  首先介绍Pocket PC 与Windows CE。Pocket PC是以Windows CE 3.0为操作系统的掌上电脑。Windows CE是微软公司开发的一种嵌入式操作系统,它是一种模块化的(可裁剪组装定制) 、实时的、有强大通信能力的嵌入式操作系统。Window CE程序开发语言主要是eVB、eVC(即嵌入VB、嵌入VC,它们是VB、VC的子集),程序开发工具eMbedded Visual Tools(简记为eVT,包括eVB、eVC)由微软免费提供,免费下载网址为http:// www.microsoft.com /mobile / developer /default.asp。建议将eMbedded Visual Tools安装在以Windows 2000/NT/XP为操作系统的PC上。安装eMbedded Visual Tools开发环境非常容易就不作介绍了。假设eMbedded Visual Tools安装在PC上的C: Windows CE Tools下,那么在C: Windows CE Toolswce300MS Pocket PCemulation下是Pocket PC Emulation(Pocket PC仿真器,仿真器方便了没有Pocket PC的初学者学习);在C: Windows CE Toolswce300MS Pocket PCsamples下是eVB、eVC的例子程序;仿真器路径下的内容就相当于一个OS的内容,其中的例子程序对初学者有极大帮助。此外在C: Windows CE Toolswce300MS Pocket PClib、Controls、mfclib、Runtimes下分别有不同CPU下要使用的库文件,在仿真器下的开发要选x86em。

  再介绍Pocket PC上的SQL Server for CE。Pocket PC支持两种数据库文件:.cdb文件(可视为Pocket Access所使用的文件)和.sdf文件(可视为SQL Server 2000 for CE所使用的文件),但并没有实际的软件系统Pocket Access或SQL Server 2000 for CE,它们均以控件ADOCE的形式存在,可用编程的方法实现创建和修改设备上的数据库。ADOCE 3.0内置在Pocket PC中,使用它可以处理.cdb文件。SQL Server 2000 for CE(以下简称为SSCE)可直接从网上免费下载,安装后用它可以处理.sdf文件,可以和远程PC的SOL Server同步。安装SQL Server 2000 for CE的同时也就安装了ADOCE 3.1(ADOCE 3.1没有内置在Pocket PC,eVB中也没有,但也可单独从网上免费下载),使用ADOCE 3.1才能编写与SQL Server 2000数据库交互的程序,使用一些诸如Replication(复制)、RDA(Remote Data Access,远程数据访问)的特性。SSCE约占Pocket PC 1MB的空间,能执行SQL查询处理工作,它只支持单一用户,因此不具备登录记录、登录管理员功能,也不支持多用户。SSCE免费下载地址是www.microsoft.com /sql/ productinfo/cedownload.htm,安装时要选上Development Tools(主要完成RDA与Replication功能)及Server Tools(主要完成让IIS支持与SQL Server 2000的连接功能)。当程序使用的数据库需要连接到大型数据库SQL Server 2000,并与之集成时要使用SSCE。若大型数据库是SQL Server 2000,则SSCE支持RDA和Replication;若大型数据库是SQL Server 2000之前的版本,则只支持RDA。

  最后介绍ADOCE (Microsoft ActiveX Data Objects for the Windows® CE)。ADOCE是台式电脑ADO的子集,该子集专门用于Windows CE。ADOCE包括自己内部的数据库提供者,可以访问本地Windows CE设备的数据库,可以使用OLE DB支持的数据源。ADOCE与PC上所使用的ADO既相似又有很多的差别。ADOCE支持下面的对象:Connection对象、Recordset对象、Field对象、Fields对象、Error对象以及Errors集合。ADOCE不支持下面的ADO功能:Command命令、Property对象和Property集合。ADOCE支持ANSI Structured Query Language (SQL)的一个子集,这个子集允许用户使用SQL语句建立、查询、修改数据库、表、记录集。主要有两种类型的SQL语句:数据定义语句(DDL)、数据操作语句(DML)。DDL用来改变数据库的结构,DML用来读、排序、修改信息等。Windows CE有一些标准数据库所没有的特性,例如排序时空字符在最前或最后,支持无符号数字数据类型。ADOCE支持的SQL语句有一些限制:文字常量受内存限制;表格最多有255列;查询结果最多为64 kb;表名和过程名最多为31字符;字段名最多为64字符;在ORDER BY语句中,最多可有3个字段等。

  顺便指出,EVB不支持数组控件,这就意味着不能同时初始化大量同类型的的控件,使控件的赋值和初始化要重复大量的工作。另外,EVB3.0中Left方法有错误,在字符串的操作中造成麻烦,解决办法是使用Mid来代替。此外,EVB不支持Unload方法,所以很难在程序结束时,对系统中的对象进行删除操作。有关ADOCE的详细使用说明请直接参考后面的编码或eVB的帮助。

  下面介绍SSCE的相关概念及配置。

  2. SSCE的相关概念及配置

  我们使用的是SQL Server200 for CE 1.1(SSCE1.1)版本。使用SSCE1.1至少需要有PC上的SQL Server 2000 Developer版本。安装完SQL Server 2000 for CE 1.1之后,则同时已安装ADOCE3.1(在eVB中选“Project/Reference”可找到: Microsoft CE ADO Control 3.1 、Microsoft CE ADO Ext.3.1 for DDL、Microsoft CE SQL Server control 1.0)。ADOCE3.1使得我们能写与SQL Server 2000数据库交互的程序,访问在Pocket PC上建立的.sdf数据库,使用一些特性如Replication 、RDA。使用这些特性时要在项目中引入:Microsoft CE SQL Server Control 1.0、Microsoft CE ADO Control 3.1、Microsoft CE ADO Ext.3.1 for DDL。安装完SSCE之后,找到C: Program FilesMicrosoft SQL Server CE ISQLWCE目录下的isqlw_wce.exe文件,选择适当的CPU类型,复制到Pocket PC后直接执行,我们就可使用Query Analyzer建立新数据库、连接旧的数据库和查询数据库。例如,选择“File”,选择“Connection”,然后单击“Create”,则建立一个新的数据库。也可用它连接已有的数据库内容,以及用它查询*.sdf内的数据。

  • RDA的概念

  RDA(Remote Data access)是远程数据存取的方法,分为PUSH(推)和PULL(拉)两种方式。PUSH是将本地的数据上传到服务器上,而PULL是将服务器数据下载到本地。此外,SSCE的RDA还可以远程提交T-SQL命令(Submit SQL Statement),远程应用程序利用T-SQL命令可以改变服务器上数据库的数据。需要指出的是,PUSH方式必须保证保持本地表和远程数据的结构一致( PUSH方式需要一个数据开始点,即保持本地表和远程数据的结构一致,这要在联网的条件下通过拉的方式实现),而PULL方式必须是本地没有同样名字的表。下面,我们用代码说明:

  • 首先初始化RDA对象的参数:

  Set CERDA = CreateObject("SSCE.RemoteDataAccess.1.0")

  CERDA.InternetURL = "http://202.204.96.168:8080/sscesa10.dll"

  CERDA.InternetLogin = ""

  CERDA.InternetPassword = ""

  CERDA.LocalConnectionString="data source=& "ProjectInfo.sdf"

  txtRDAConnectString="provider=sqloledb;datasource=202.204.96.168;INItialCatalog=ProjectInfo;UID=sa; password=newchinafive"

  txtRDALocalTable = "MsgInfo"

  txtRDAErrorTableName = "MsgInfo_Err"

  txtRDAQuery = "select * from MsgInfo"

  • 然后调用PULL方法初始化数据:

  rda.Pull txtRDALocalTable, txtSyncCommand, strRemoteConn, TRACKINGON, txtErrorTableName

  • 最后用PUSH方法把本地表修改的数据更新到服务器数据中:

  rda.Push txtLocalTableName, strRemoteConn

  • RDA的结构

  RDA的结构主要分为三层:Client端、IIS端、Server数据库端。Client端即Poceket PC应用程序端:在安装SSCE之后,也就安装了一个SSCE Client Agent,Poceket PC应用程序通过这个代理程序可查询本机数据、向IIS端要求一个Request或提交T-SQL命令以便告诉IIS需要PC Server的数据,SSCE Client Agent也负责接收IIS传来的内容;IIS端:安装SSCE之后,也就安装了一个SSCE Server Agent,IIS通过这个代理程序处理Poceket PC的请求,向SQL Server 要求数据,再返回给Client Agent;Server端即PC机器上的SQL Server数据库端,IIS端传来的信息经过SQL Server OLEDB Provider处理后返回给SSCE Server Agent代理程序。

  • RDA环境设置

  SQL Server与IIS Server可安装在一个或不同机器上,它们也可与EVT安装在同一个机器上。假设SQL Server与IIS在同一PC,安装SSCE后找ssceca10 .dll并注册(如regsvr32.exe C:RDA ssceca10.dll );打开“控制面板->管理工具-> Internet 信息服务”,然后设定IIS Server的虚拟目录(如为C: RDA),设置虚拟目录访问权限为“脚本和可执行”,注意要选中“执行(如ISAPI应用程序或CGI)”,设定验证方法为“基本验证”(不要选“匿名访问”和“Windows验证”,这样做是为了数据库安全)。最后,为测试安装是否正确,打开IE浏览器,在地址栏中输入http://localhost/sqlce/sscesa10.dll如果显示为“body”则说明设置正确。

  • SSCE的Replication(复制)的概念与模型

  Microsoft® SQL Server™ 2000 的复制是在数据库之间对数据和数据库对象进行复制和分发并进行同步以确保其一致性的一组技术。使用复制可以将数据分发到不同位置:通过局域网、使用拨号连接、通过 Internet 分发给远程或移动用户。复制还能提高应用程序性能,根据数据的使用方式在物理上分隔数据(例如,将联机事务处理 OLTP 和决策支持系统分开),或者跨越多个服务器分布数据库处理。分布式事务也是实现分布的方法,它能保持数据的紧密一致性。可通过两阶段提交协议来实现分布式事务,这种紧密一致性的主要局限在于它需要在快速的局域网上才能很好的工作。复制实现了松散的一致性,修改服务器上的数据并不是同时发生的,这使得数据修改和复制数据的修改之间存在延时。

  复制模型基于一种“出版/订阅”的结构,由以下几个元素组成:出版者,分发者,订阅者,出版物,文章和订阅物。数据分发与订阅有两种同步方式:一种是出版者主动的推模式(PUSH),该模式是出版者在没有订阅者提出请求的前提下,先主动地将更新的信息传递给订阅者。另一种是订阅者主动的拉模式(PULL),该模式是在订阅服务器中建立订阅物,订阅者周期性的向出版者提出数据的更新请求,出版者将更新后的数据传递给订阅者,这样保持数据的一致。

  SQL Server 2000可用的复制类型有三种:快照复制、事务复制和合并复制。快照复制就像是给源数据照一张快照,然后将数据全部送往目的服务器,平时不用监视源数据的变化,需要较少的系统资源,它比较适合源数据更新频率不高的场合;事务复制就是将源数据产生数据变化的事务传送到订阅服务器,在订阅服务器方执行与源数据同样的事务操作来达到数据的一致性;合并复制则是跟踪出版数据的变化,并把变化的数据传送到订阅服务器上。所谓“合并复制”就是使各站点自主工作(联机或脱机),并且过一段时间后将多个站点上的数据修改合并为一个统一的结果。首先在订阅服务器上应用初始快照,然后 SQL Server 2000 在发布服务器和订阅服务器上跟踪对已发布数据的更改。数据在调度时间或请求时在服务器之间进行同步。由于在多个服务器上独立地进行更新(不提交协议),发布服务器或多个订阅服务器可能更新同一数据。于是,合并更新时就可能出现冲突。合并复制包含默认或自定义冲突解决选项,可在配置合并复制时加以定义。当冲突发生时,合并代理程序唤醒调用冲突解决程序,决定接受和向其它站点传播哪些数据。合并复制可用的选项包括:水平和垂直筛选已发布的数据,包含联接筛选和动态筛选,使用可选同步方,优化同步以改善合并性能,验证已复制的数据以确保同步,以及使用可连接的订阅数据库。合并复制适用于下列情况:多个订阅服务器需要在不同时刻更新数据并将这些更改传播到发布服务器和其它订阅服务器;订阅服务器需要接收数据、脱机更改数据、然后将更改同步到发布服务器和其它订阅服务器;应用程序延迟请求为高或低;站点独立很重要。需要指出的是,在合并复制中并不是总将出版服务器上的数据传送到订阅服务器上,订阅服务器也会传递到出版服务器上来达到数据的同步。在两端数据冲突时,最后数据的变化可根据用户设定的优先权和存储过程来解决冲突。对于Pocket PC上的数据库,我们只能用合并复制发布。

  • SSCE的Replication环境配置

  要先在PC上的SQL Server 2000中来对SSCE的Replication进行配置。配置方法与PC上进行配置一样,这里简要介绍一下配置过程。先建立好我们需要进行复制发布的数据库ProjectInfo,再设置发布的数据库为ProjectInfo;确定发布类型时选择合并发布;确定订阅服务器的类型时要选择“运行SQL Server CE的设备” ;确定要发布的表时选择全部的表;设置发布的名称为ProjectInfo。完成发布的设定之后,就可以在复制监视器中看到一个名叫ProjectInfo的发布。这样订阅者就可以订阅了。

  • IIS的设定

  假定安装SQL Server 2000和IIS在同一台机器上,注册sscesa10.dll:

  regsvr32 C:Program FilesMicrosoft SQL Server CEServersscesa10.dll。

  然后设定IIS Server上的站点,并设置执行权限为“脚本和可执行程序”。最后在目录安全的地方,设置匿名访问和验证控制的验证方法为允许匿名访问。这样就配置好了IIS。

  3. 系统的实现

  限于篇幅,这里介绍本系统的主要部分,系统的完整源代码可直接向作者索要。

  本系统使用的数据库名为:ProjectInfo。共用到1个表MsgInfo。其中MsgName字段代表项目的名称,MsgAuthor代表项目的作者,MsgDate代表项目日期,MsgDetail代表项目的详细信息。

  这里先在EVB里建立一个DMProject项目,然后进行以下的操作:

  • 添加模块

  本系统中共用到两个模块:Global:用来定义复制和RDA变量并初始化,定义系统全局变量等信息;SSCEConstants:用来定义复制和RDA要用的常量。

  • 用户界面设计

  主窗体设计如下:最左边是TreeViewCtl控件,是用来显示项目信息树;中间有一个PictureBox控件是控制项目信息树的显示;右边有一个ListViewCtl控件用来显示项目的详细信息。点击“我的项目”信息树在右边信息列表里显示记录。单击右边信息列表头可以对该列进行排序。只有选中的记录才能对其进行删除、修改操作。点击白色的箭头可以隐藏列表树,再点击可以显示出来,这样设计是为了能显示更多内容。

  部分代码设计如下:

  Option Explicit

  "开始复制操作

  Private Sub startReplication()

  '显示等待鼠标

  ShowWaitCursor

  Dim Str As String

  Dim strPath As String

  Dim pchange As Long

  Dim pconflict As Long

  strPath = App.Path

  If strPath = "" Then

  strPath = ""

  End If

  '订阅

  On Error Resume Next

  ProcInfo.PMsgInfo.Caption = "正在订阅..."

  ProcInfo.Show

  ProcInfo.SetFocus

  If FileSystem1.Dir(strPath & "ProjectInfo.sdf") <> "" Then

  '存在数据库文件

  'CEMerge.AddSubscription EXISTING_DATABASE

  Else

  CEMerge.AddSubscription CREATE_DATABASE

  If CEMerge.ErrorRecords.Count > 0 Then

  ShowErrors CEMerge.ErrorRecords, "添加订阅失败"

  Else

  'MsgBox "订阅添加成功!", vbOKOnly, "添加订阅"

  ProcInfo.PMsgInfo.Caption = "恭喜,订阅成功!"

  End If

  End If

  '同步数据

  On Error Resume Next

  '初始化同步

  CEMerge.Initialize

  If CEMerge.ErrorRecords.Count > 0 Then

  ShowErrors CEMerge.ErrorRecords, "初始化失败,请查看复制设置!"

  frmReplAddSubscription.Show

  Else

  On Error Resume Next

  ProcInfo.PMsgInfo.Caption = "正在同步处理..."

  CEMerge.Run

  If CEMerge.ErrorRecords.Count > 0 Then

  ShowErrors CEMerge.ErrorRecords, "同步失败"

  Else

  ProcInfo.PMsgInfo.Caption = "同步完成."

  'Str = "同步完成" & vbCrLf

  FrmsyncMsg.Label2.Caption = "发布改变:" & CEMerge.PublisherChanges & "个"

  FrmsyncMsg.Label3.Caption = "发布冲突:" & CEMerge.PublisherConflicts & "个"

  FrmsyncMsg.Label4.Caption = "订阅改变:" & CEMerge.SubscriberChanges & "个"

  pchange = CEMerge.PublisherChanges

  pconflict = CEMerge.PublisherConflicts

  FrmsyncMsg.Show

  End If

  CEMerge.Terminate

  ProcInfo.PMsgInfo.Caption = "同步终止."

  ProcInfo.SetFocus

  End If

  If pchange > 0 Or pconflict > 0 Then

  ProcInfo.PMsgInfo.Caption = "正在初始化项目列表..."

  frmMain.initList

  ProcInfo.PMsgInfo.Caption = "初始化项目列表完成."

  ProcInfo.PMsgInfo.Caption = "正在初始化树列表..."

  frmMain.initTree

  ProcInfo.PMsgInfo.Caption = "初始化树列表完成."

  End If

  ProcInfo.Hide

  HideWaitCursor

  End Sub

  本系统虽然设计较简单,但它基本上涉及到了分布式数据库的开发的全部要点。在实际的工作中可能我们还需要考虑的更复杂一些,比如在功能上支持项目分类和项目提醒,在分布式数据库的设计中更合理的进行数据划分,使程序访问数据库的效率更高,达到更高的容错性等等。

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:基于ARM微处理器和uClinux的串行通信的设计与实现
下一篇:可复用SPI模块IP核的设计与验证

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图