c/s 自动升级(WebService)
首先声明,本人文笔不好,大家见笑,请高手不要吐槽.
做c/s开发肯定会遇到的就是自动升级功能,而这实现方式是非常多. 本文使用 webservice的方式来提供升级服务
首先准备服务
为了方便我们专门用一个文件夹来存放需要更新的应用程序
因为觉得通过新版本来更新很麻烦,所以验证文件是否需要更新用md5来判断
WebService:
public string GetVer(){DirectoryInfo dir = new DirectoryInfo(Server.MapPath("update"));var list = new List<object>();var url = string.Format("http://{0}:{1}/update/", HttpContext.Current.Request.Url.Host,HttpContext.Current.Request.Url.Port);DirectoryInfoHelper.SetDirectoryInfo(dir, list, url, "");JavaScriptSerializer json = new JavaScriptSerializer();return json.Serialize(list);}
相关方法:
public static void SetDirectoryInfo(DirectoryInfo dir, List<object> list, string url, string dirName){foreach (var file in dir.GetFiles()){FileStream fs = File.OpenRead(file.FullName);list.Add(new { file.Name, Md5 = Security.GetMd5(fs), LocalHost = url, Directory = dirName });fs.Close();}foreach (var dirInfo in dir.GetDirectories()){SetDirectoryInfo(dirInfo, list, url, string.Format("{0}{1}/", dirName, dirInfo.Name));}}
说明:1.不想将模型,而服务端只需要提供数据,所以采用匿名对象
2.GetVer服务返回信息中 包含 文件名,md5值,域名地址,该文件上级目录
C/S:
先看界面
现在就跟着提示消息走吧.
1.获取服务文件特征
调用webservice获取文件信息
private List<VerMd5Date> GetServerData(){AutoUpdate.Update update = new AutoUpdate.Update();var json = update.GetVer();var list = AppCode.JsonHelper.JsonDeserialize<VerMd5Dates>(json);return list;}
客户端需要反序列化json 所以建了一个对应model
public class VerMd5Date{public string Name { get; set; }public string Md5 { get; set; }public string LocalHost { get; set; }public string Directory { get; set; }}class VerMd5Dates : List<VerMd5Date>{}
反序列化:
/// <summary>/// 反序列化json/// </summary>/// <typeparam name="T">对象</typeparam>/// <param name="jsonString">json字符串</param>public static T JsonDeserialize<T>(string jsonString){DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));T obj = (T)ser.ReadObject(ms);return obj;}
2.获取本地文件特征
private List<VerMd5Date> GetLocalData(List<string> serverNames){DirectoryInfo dir = new DirectoryInfo(Application.StartupPath);var list = new List<VerMd5Date>();DirectoryInfoHelper.GetDirectoryInfo(dir, list,"",serverNames);return list;}
相关方法:
public static void GetDirectoryInfo(DirectoryInfo dir, List<VerMd5Date> list, string dirName, List<string> serverNames){foreach (var file in dir.GetFiles().Where(m=>serverNames.Contains(dirName+m.Name))){using (FileStream fs = File.OpenRead(file.FullName)){list.Add(new VerMd5Date{Name = file.Name,Directory = dirName,Md5 = Security.GetMd5(fs)});}}foreach (var dirInfo in dir.GetDirectories()){GetDirectoryInfo(dirInfo, list, string.Format("{0}{1}/", dirName, dirInfo.Name), serverNames);}}
说明:serverNames 是服务器文件名集合,主要用来排除本地文件夹中非本程序文件
3.对比文件差异
private List<VerMd5Date> EqualsList(List<VerMd5Date> list, List<VerMd5Date> localList){var getList = new List<VerMd5Date>();foreach (var ver in list){var file = localList.FirstOrDefault(m => m.Name == ver.Name && m.Directory == ver.Directory);if (file == null){getList.Add(ver);}else{if (file.Md5 != ver.Md5 && file.Directory == ver.Directory){getList.Add(ver);}}}return getList;}
4.下面就开始下载吧
foreach (var file in _getList){SetItem(string.Format("正在下载 {0}{1}", file.Directory, file.Name));DownloadFile(file.LocalHost, file.Directory, file.Name, progressBar1);}
DownloadFile:
下载方式有很多,这里已经有了文件的下载地址,下载代码大家就尽情发挥.有什么好的方式也告诉我一下,非常感谢
运行截图
基本上就完了.请高手不要吐槽啊.
源码地址:http://pan.baidu.com/share/link?shareid=656896785&uk=2215622930
c/s 自动升级(WebService)相关推荐
- c/s 自动升级(WebService)
首先声明,本人文笔不好,大家见笑,欢迎高手吐槽. 做c/s开发肯定会遇到的就是自动升级功能,而这实现方式是非常多. 本文使用 webservice的方式来提供升级服务 首先准备服务 为了方便我们专门用 ...
- CAutoupdater通用自动升级组件
CAutoupdater通用自动升级组件 1.CAutoupdater通用自动升级组件介绍 1.1.组件介绍 C/S构的特点是能充分发挥客户端的处理能力,很多工作可以由客户端处理后再提交给服务器,对 ...
- 自动升级的原理及实现
C/S程序自动升级是一个很重要的功能,原理其实很简单,一般包含两个程序一个是主程序,也就是除了升级功能以外的程序,另一个就是升级程序,常见的360,金山安全卫士都是这样. 主要包括以下几点: ...
- 【转载】插件自动升级
ESFramework介绍之(20)―― 插件自动升级 当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对 ...
- 在WinForm中使用Web Services 来实现软件自动升级(转)
一.升级的好处. 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序的可维护性差,布置困难,升级不方便,维护 ...
- tomcat升级_「shell脚本」懒人运维之自动升级tomcat应用(war包)
准备: 提前修改war包里的相关配置,并上传到服务器: 根据要自动升级的tomcat应用修改或添加脚本相关内容: tomcat启动脚本如是自己写的,要统一格式命名,如:xxx.xxxTomcat 等: ...
- 软件自动升级ftp服务器,国人自己的专业FTP服务器软件(上)
目前FTP服务器软件都为国外作品,国内成熟的FTP服务器软件很少,有一些,但从功能上看来远不能和那些流行的服务器软件媲美.不过,笔者近日发现了一款国人自行开发的FTP服务器软件Crob FTP Ser ...
- Ionic实战 自动升级APP(Android版)
Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...
- VS 打包升成可自动升级的安装包
VS 打包升成可自动升级的安装包 http://www.sufeinet.com/forum.php?mod=viewthread&tid=2187 posted on 2013-07-23 ...
最新文章
- 域用户权限设置目录权限
- mongodb 安装_1、MongoDB 安装
- Tomcat7配置DataSource数据源
- Windows远程桌面管理--功能强大的远程批量管理工具
- iis 不是 php,iis是不是默认支持php
- 开源数学软件zzllrr Mather小乐数学简介Summary
- java mina unix client
- 缔造完美运维 共谱双赢新篇
- PyTorch 系列 | 数据加载和预处理教程
- python不合法的布尔表达式_python测试题
- eclipse各个版本的区别
- CCF201712试题
- php重写mysql类_如何成功重写旧的mysql-php代码与已弃用的mysql_ *函数?
- 适用于ActiveX v18.6 x86的Codejock Xtreme Suite Pro
- 【雷达信号处理基础】第1讲 -- 雷达系统概述
- 【工具篇】OBS推流在Bilibli直播平台的设置和应用
- redis-CacheCloud
- 联想台式机进入修复计算机,联想台式机一键恢复的使用方法
- 使用ffmpeg对视频、图片进行旋转,上下翻转,水平翻转
- java去处科学技术法,java撤销科学计数法
热门文章
- C++Slow Sort慢排序的实现算法(附完整源码)
- C语言实现克拉茨Collatz序列(附完整源码)
- C语言实现聚类K-means cluster算法(附完整源码)
- C++普通引用和常引用
- 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)
- HDP安全之集成kerberos/LDAP、ranger;安装部署kerberos;安装Knox;安装LDAP;启动LDAP;验证Knox网关
- 用模板元实现50个台阶问题,一次走一步或者两步或者3步,用模板元实现求裴波那契额数列
- java调用WCF问题
- LINUX系统中动态链接库的创建与使用
- 笔画输入法电脑版_太有才!浙江路政员发明汉字码输入法