基于.NET的客户端自动升级系统的设计与实现
2022-04-04
来源:汇智旅游网
基于.N ET的客户端自动升级系统的 设计与实现 程浩 (东北大学理学院辽宁沈阳110819) 【摘要】为了解决C/S模式下客户端的版本控制与自动升级问题,提高C/S模式下客户端维护工作效率,基于.NET Framework,使用c#语言,采用XML文件和FTP服务器技术,实现了客户端自动升级功能。针对该功能,对系统采用的关键 技术和关键思路进行了简要介绍,对如何读取XML文件、下载文件和自动升级流程等进行了详细介绍。经测试,自动升级功能 操作方便,有效地提高了系统维护人员的工作效率。 【关键词】.NET C/S XIVlL信息化系统自动升级 中图分类号:TP393 文献标识码:A文章编号:10O8一l739(2014)10—52—3 Design and Implementation of Client Automatic Upgrade System Based on.NET CHENG Hao (College ofSciences,Northeasten rUniversity,Shenyang Liaoning 110819,China) Abstract:In order to solve the problems of version control and automatic upgrade of client in Client/Server(C/S)mode and improve the efficiency ofmaintenance work ofclient in C/S mode,this paper implements the automatic upgrade function ofclient based on.NET Framework and using C撑language.XML file as well as FTP server technology.Aiming at this function.this paper briefly introduces the key technologies and key ideas used by system,and describes in detail how to read the XML file,download the me and implement the automatic upgrade process.The test proves that the automatic upgrade function is easy to operate,and effectively improves the work e ̄ciency ofsystem maintenance personne1. Key words:.NET;C/S;XML;informationization system;automatic upgrade 1引言 众所周知,对于一般的软件开发,在开始的时候都会有一 行速度、数据安全和人机交互等方面,B/S就远 如C/S那么 强大 但是,C/S结构的程序可维护^牛差,布置困难,升级不力 便成为采用C/S结构后的一大难题.. 个技术选型的阶段,最大的选型就是首先要确定是选择 Client/Server模式还是Browser/Server模式。综合而论:二者各 有优劣,在很多方面都不能被对方互相取代,如在适用 2关键技术 2.1.NET框架 .Internet和维护工作量等方面,B/S比C/S要强很多:但在运 定稿日期:2014~()4—26 NET Framework是由微软开发的一个致力于敏捷软件 开发(Agile software development)、快速应用开发(Rapid 52 计算机与网络 application development)、平台无关性和网络透明化的软件开发 的许多类都提供了管理XML文档和流的方式。 平台,是以一种采用系统虚拟机运行的编程平台,以通用语言 运行时(Common Language Runtime)为基础,支持多种语言 (Visual c#、Visual Basic和Visual c++等)的开发f”。 .3关键思路 系统自动升级的主要思路是检查版本信息,然后自动下 载更新文件功能。自动升级的主要思想是:在本地计算机的客 户端应用程序中,放置一个AutoUpdate.xml文件,当程序运行 NET是~种在Windows平台上编程的新架构,提供了更 多的基础类库,包括输入输出和数据访问等各个方面。.NET Framework是面向对象的编程.具有高效的数据访问支持,并 内置了XML支持,增强了对Web服务的支持121,.NET引入了 程序集的概念,并增强了安全性。系统基于.NET Framework, 使用c≠≠语言开发。 时,首先启动升级程序,升级程序连接到FTP服务器,检查客 户端版本信息。如果需要更新,则根据xml文件到FTP服务器 上下载新的主程序及对应的库文件和XML配置文档等【3]。升 级成功后,启动主程序。 2_2三层C/S结构 三层C/S结构把应用功能分为表示层、功能层和数据层。 利用三层C/S结构,对每层进行明确分割,使其逻辑独立。与 普通的C/S结构相比,不但数据层要作为DBMS独立出来,表 示层和功能层还要分离成独立的程序,并形成简洁明了的借 口,三层C/S基本硬件结构图如图1所示。 4系统实现 4.1读取XML文本功能的实现 为了实现读取最新版本,系统需要把最新的版本信息放 在服务器端。XML文档是一种标准且简单的能跨多个平台家 换的格式存储数据方式,可以创建和使用自己的标记,具有很 强的可拓展性、灵活性和自描述性 。 系统中,使用XML文档存储文件的版本信息和文件路径 信息。其中,UpdateInfo信息用于存放文件版本信息, UpdateFileList用于存放需要下载的文件信息。 <Updatelnfo> <UpdateTime Time=”2013年1 1月9日17:20:37’’/> 图1 3层C/S基本硬件结构 <Version Num=”1.0.0.1”/> 与传统的C/S两层结构市H比,C/S三层结构具有以下特 点:①硬件组成比较灵活的:对于二各个层可以选择与其处理负 荷和处理特性相适应的硬件。这是一个与系统可缩放性直接 </Updatelnfo> <UpdateFileList> <UpdateFile FileName=”TestClient.exe’’/> <UpdateFile FileName=”TestServer.dⅡ”/> 相关的问题;②程序的可维护性得到了有效提高:三层C/S结 构中,每层可以并行开发,也可以根据需要选择适合的开发语 言;③更容易管理和维护应用技术规范,各层功能独立,所以 <UpdateFile FileName=”AutoUpdater.xml”/> </UpdateFileList> 处理逻辑变得相对简单;④系统管理简单,可支持异种数据 库。 下载XML文件后,系统只需读取XML文档中的对应节 点.即可读取到文件的版本信息和需要下载的文件售 。 读取XML文件时,主要应用了System.xml命名空间下的 2.3 xml文件 可扩展标记语言(XML)是标准通用标记语言的子集,一 种用于标记电子文件使其具有结构性的标记语言。XML在. NET Framework中具有非常重要的作用。.NET Framework不 类的对象。首先,初始化XMLDocnment的对象,然后调用. NET提供的Load()方法打开AutoUpdater.xml文件。打开以后, 使用XMLNodeList类的对象获取FileType标签下的所有节 仅允许在应用程序中使用XML..NET Framework本身也在配 置文件和源代码文档中使用XML[21。为了拓展使用XML,. NET Framework包含了System.xml命名空间.该命名空间中 点。使用XML文档作为版本控制文件,不但方便读取版本信 息,而且方便读取需下载的文件信息。 4.2下载文件功能的实现 .NNT类库中提供了很多网络操作的类,包括请求/响应 53 层、应用协议层和传输层等。系统主要利用了FtpWebRequest 类、FtpWebResponse类和FileStream类实现从FTP服务器下 载文件功能。 首先,根据FTP地址创建FtpWebRequest对象reqFTP,指 定其数据传输类型和登录FTP服务器的用户名和密码。然后 升级,如果用户选择“不升级”,则直接启动主程序。关掉升级 程序:如果用户选择“升级”,再读取xm]文件中的需下载文件 信息,然后下载对应的文件到到对应的位置中,然后再 动 TestClient程序,关掉升级程序M,自动升级流程图如图2所贰 刨建FtpWebResponse类对象response, 利用其 GetResponseStream0方法读取文件流。最后,利用Stream类的 read()方法和FileStream类的初始化方法,形成本地文件 。 关键代码如下: reqFTP (FtpWebRequest)FtpWebRequest.Create(new Uri ( th));//指定FTP地址 reqFTP.UseBinary:true;//指定传输类 reqFTP.Credentials=new NetworkCredential(ftpUserlI), ftpPassword); FtpWebResponse response GetResponseO; (FtpWebResponse)reqFTP Stream ftpStream response.GetResponseStream0; long cl=response.ContentLengch; int bufferSize=2048; int readCount; 5结束语 图2自动升级流程图 系统测试是针对整个产品系统进行的删试,H的是验 糸统是否满足了需求规格的定义,找出与需求规格 符或与 之矛盾的地方,从而提出更加完善的方案。 系统采用黑盒测 byte[】buffer:new byte[bufferSize]; readCount=ftpStream.Read(buffer,0,bufferSize);//读取文 件 FileStream outputStream=new FileStream(1ocalPath. 方法,系统部署后,针对自动升级系统、系统运行 务器和 外没等进行了集中删试。 经测试,本系统运行稳定,操作简单实用,易_『维十r】, 白 FileMode.Create);// ̄tJ建本地文件 一般的,版本更新时,需要下载的文件很多也很大,需要 较快的响应速度和较强的安全『生。利用该系统.可囱‘效提高维 护人员的工作效率,降低系统升级的出错率。 用很多系统资源,响应较陧。测试显示,下载文件时,占用了 较多的系统内存,反应较慢。为了提高系统响应速度,系统应 用了多线程机带l - 、多线程的功能主要是可以提高系统的执行效率。要使用 多线程,必须引入System.Threading命名宅间。System. 参考文献 【1】艾迪明..NET框架体系结构UJ_计算机工程与应用,2()(】3,39 (2):174~176. Threading中包含了大量的类和接口支持多线程。系统实现时, 当发现新版本、需要下载文件时,则自动创建一个新线程(创建 Thread的对象,调用Start0方法),下载FTP服务器上的系统文 件。这样.程序和主线程并存,共享系统资源,有效地提高了响 应速度。 [21 NAGEL C EVJEN B.GLYNN J.c拌2(105&.NET 3.o高级 编程(第5版)【M】.北京:清华大学出版社,2()()7. 【3】杜成龙,钟立,肖云..NET分布式系统的自动升级设计与 实现【『1.计算机工程,20()7,33(2):239—240. f4J徐永诚,赵曦滨,邢桂芬.X_ML在C/S与B/S混合体系结构 4.3自动升级功能的实现 自动升级程序执行后,首先从服务器端下载xnd版本控 制文件.读取服务器端的最新版本,然后再读取本地xml配置 下的应用Ul_计算机应用研究,2002,19(6):148—150. 【5】蔡正权.文件下栽系统设计U】_电脑知识与技术,2()1fJ,6(21): 6053-6057. 文件中的客户端版本号(<Updatelnfo>节点),并与系统最新版 本号进行卜匕对,如果低于系统版本号,则提示用户是否对软件 【6】肖江文,廖幼文.C/S结构下客户端软件自动升级的方法研 究Ul_计算机工程与应用,2005,41(35):95—97.