(原创文章,转载请注明来源:http://blog.youkuaiyun.com/hulihui)
0 前言 |
>>[前言]、[第1节]、[第2节]、[第3节]、[第4节]、[第5节] |
众所周知,诸如ASP.NET等的Internet应用系统易于发布与更新版本——只需要修改或增加服务器端程序。比较而言,通过光盘或安装程序发布的窗体应用程序或客户端系统,版本升级则要困难得多。为此,Microsoft在其.NET平台上提供了ClickOnce技术,该技术具有启动前更新或启动后更新(下次运行时安装)两种模式,但使用时客户端需要证书,也不能在下载前做文件压缩处理,不可指定客户端文件安装路径,主要针对.NET程序集,不能发布部署其他类型的文件(如数据库文件、非程序集文件)。显然,ClickOnce技术缺乏应用灵活性。
本文介绍的基于.NET WebService的可扩展客户端自升级框架WebSAUF(Web Smart Auto Upgrade Framework),具有如下功能和特性:
- 可指定多种升级方式:版本比较(程序集版本或文件版本)、文件覆盖、新加文件;
- 可指定文件压缩形式:可使用GZipStream/DeflateStream压缩文件,也能定制自己的文件压缩算法;
- 可指定客户端文件夹:在升级文件配置清单中可以指定客户端文件的安装文件夹;
- 可扩展读写文件方法:通过重写(override)服务器端GetUpgradeFiles与客户端SaveUpgradeFiles方法,可以扩展升级文件的读写行为;
- 可扩展压缩处理方法:压缩方法类TCompressMethod的读写文件方法全部是protected virtual,均可以重写;
- 独立性应用框架结构:独立的基于WebService升级文件服务器,独立的登录认证方式,独立的客户端应用类型,可以应用于各种类型的客户端应用系统。
本文内容如下:
1 技术思路与架构 |
>>[前言]、[第1节]、[第2节]、[第3节]、[第4节]、[第5节] |
1.1 总体技术思路
- 基于.NET WebService技术平台,采用多种文件压缩方法和程序升级形式,使用命令行程序自动升级指定文件夹的客户端文件;
- 框架应用环境为Web服务器、Internet与客户端应用程序(见下图的应用模型图);
- 系统设计与开发平台为.NET 2.0、VC# 2005;
- WebSAUF框架具有独立性和可扩展性。
1.2 系统处理流程
客户端通过WebService请求Web服务器升级文件清单,然后在客户端比较本地的指定文件夹的同名文件,确定需要升级的文件名,接着下载这些升级文件并改名存储到同文件夹中,最后启动命令行bat进程、终止当前进程完成最后的删除原文件与改名升级文件操作。
1.3 框架的类层次结构
从应用或功能划分,WebSAUF框架有四组类:服务器端类(含一个升级文件配置清单文件)、客户端类、压缩方法类与辅助类,它们之间的关系见下图:
- 服务器端
- TSmartAutoUpgradeWebService泛型类:是服务器端WebService网页文件(asmx文件)程序代码的基类,它有TCompressMethod类型约束的泛型参数,定义了4个WebMethod:
- GetRASPublicKey:获取服务器端RSA加密共钥;
- Login:登录Web服务;
- GetUpgradeFileList:获取服务器上的升级文件配置清单;
- DownloadUpgradeFiles:下载服务器上的升级文件。
- SmartAutoUpgradeFileConfig配置文件: 服务器端的升级文件配置清单,该xml文件包含一个<FileList>根节点元素与若干<File>元素,详细介绍参见第3节;
- TSmartAutoUpgradeWebService泛型类:是服务器端WebService网页文件(asmx文件)程序代码的基类,它有TCompressMethod类型约束的泛型参数,定义了4个WebMethod:
- 客户端
- TSmartAutoUpgradeClient泛型类: 是WebSAUF在客户端应用系统的基类,它具有TCompressMethod类型的泛型参数,定义了3个public方法、2个public属性与3个事件,具体使用见第3节;
- WebService代理类TSmartAutoUpgradeWebServiceProxy:是服务器端类型TSmartAutoUpgradeWebService的客户端代理,VS开发工具的Web Reference引用时可创建该类,TSmartAutoUpgradeClient使用该代理类调用Web服务器的asmx网页。
- 压缩方法类TCompressMethod:WebSAUF允许传输压缩文件,也允许定制自己的文件压缩算法。该类型提供了2个public方法ReadFile/SaveFile,它们可以调用4对protected virtual的文件Read/Save方法中的指定方法(无压缩、GZip、Deflate和Custom):
- ReadFileWithoutCompress/SaveFileWithoutCompress:直接读写文件字节信息;
- ReadFileByGZipCompress/SaveByGZipCompress:使用GZipStream组件读写文件字节信息;
- ReadFileByDeflateCompress/SaveByDeflateCompress:使用DeflateStream组件读写文件字节信息;
- ReadFileByCustomCompress/SaveByCustomCompress:使用自定义算法读写文件字节信息。
- 辅助类: WebSAUF框架有若干辅助类,用来读取配置清单的文件信息、传递升级文件信息、定义事件参数等。
- TRPCResult类:远程或本地操作结果的基类,具有属性RpcSuccess与Message,分别表示操作是否成功与处理消息;
- TUpgradeFileConfig类:升级文件配置信息,具有属性FileName、UpgradeKind、CompressKind与Subdirectory,它们对应了配置文件的同名属性;
- TUpgradeFileConfigCollection类: