加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice 自动更新

发布时间:2020-12-17 00:31:03 所属栏目:安全 来源:网络整理
导读:一、WebService 1.1 编写自动更新WebService ?读服务器上关于程序各个版本信息的配置文件UpdateConfig.xml ??? [WebMethod] ??? public System.Xml.XmlDocument AppUpdateVertion() ??? { ??????? System.Xml.XmlDocument xml = new System.Xml.XmlDocument(

一、WebService

1.1 编写自动更新WebService

?读服务器上关于程序各个版本信息的配置文件UpdateConfig.xml
??? [WebMethod]
??? public System.Xml.XmlDocument AppUpdateVertion()
??? {
??????? System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
??????? xml.Load(CurrentPath("/IEMS_OP_AppUpdate") + @"/UpdateConfig.xml");
??????? return xml;
??? }
??? private string CurrentPath(string virtualPath)
??? {
??????? return HttpContext.Current.Server.MapPath(virtualPath);
??? } ?

1.2 UpdateConfig.xml配置文件

配置文件说明:module--模块信息,
??????????????????????????? version--版本信息,
??????????????????????????? appUrl--更新文件在服务器存放的路径
<root xmlns="">
? <module>
??? <moduleName>Biz.dll</moduleName>
??? <version>1.0.0.1</version>
??? <appUrl>http://localhost/IEMS_OP_AppUpdate/1.0.0.1/Biz.dll</appUrl>
? </module>
? <module>
??? <moduleName>CodeList.dll</moduleName>
??? <version>1.0.0.1</version>
??? <appUrl>http://localhost/IEMS_OP_AppUpdate/1.0.0.1/CodeList.dll</appUrl>
? </module>
</root>

1.3 生成WebService代理类

使用.Net命令行wsdl,生成WebService代理类

二、自动更新程序

2.1 文件下载

??????? private void DownloadFile(string source,string fileName)
??????? {
??????????? try
??????????? {
??????????????? System.Net.WebClient myWebClient = new System.Net.WebClient();
??????????????? myWebClient.DownloadFile(source,fileName);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? throw new Exception("下载失败,原因是:" + ex.Message,ex);
??????????? }
??????? }


2.2 校验版本信息
??????? private void VersionCheck(string desPath,string webServiceAddress)
??????? {
??????????? try
??????????? {
??????????????? #region 查看文件和目录
??????????????? if (!desPath.EndsWith(@"/"))
??????????????????? desPath += @"/";

??????????????? if (!System.IO.Directory.Exists(desPath))
??????????????? {
??????????????????? System.IO.Directory.CreateDirectory(desPath);
??????????????? }

??????????????? string tempPath = desPath + @"tempDesPathCache/";

??????????????? if (System.IO.Directory.Exists(tempPath))
??????????????? {
??????????????????? System.IO.Directory.Delete(tempPath,true);
??????????????????? System.IO.Directory.CreateDirectory(tempPath);
??????????????? }
??????????????? else
??????????????????? System.IO.Directory.CreateDirectory(tempPath);

??????????????? if (!System.IO.File.Exists(desPath + "UpdateConfig.xml"))
??????????????? {
??????????????????? System.Xml.XmlDocument updateConfig = new System.Xml.XmlDocument();
??????????????????? updateConfig.LoadXml(@"<root></root>");
??????????????????? updateConfig.Save(desPath + "UpdateConfig.xml");
??????????????? }
??????????????? #endregion

??????????????? WebService appUpdate = new WebService();
??????????????? appUpdate.Url = webServiceAddress;
??????????????? System.Xml.XmlDocument serverXmlDoc = appUpdate.AppUpdateVertion();
??????????????? System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();
??????????????? localXmlDoc.Load(desPath + "UpdateConfig.xml");
??????????????? bool newVersionExist = false;
??????????????? bool moduleExist = false;
??????????????? System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];
??????????????? System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];
??????????????? foreach (System.Xml.XmlNode serverNode in serverNode0)
??????????????? {
??????????????????? moduleExist = false;
??????????????????? foreach (System.Xml.XmlNode localNode in localNode0)
??????????????????? {
??????????????????????? //找到对应模块
??????????????????????? if (localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText)
??????????????????????? {
??????????????????????????? moduleExist = true;
??????????????????????????? //版本号判断
??????????????????????????? if (localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) < 0)
??????????????????????????? {
??????????????????????????????? newVersionExist = true;
??????????????????????????????? DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
??????????????????????????? }
??????????????????????????? break;
??????????????????????? }
??????????????????? }
??????????????????? //没找到对应模块
??????????????????? if (false == moduleExist)
??????????????????? {
??????????????????????? DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
??????????????????????? newVersionExist = true;
??????????????????? }
??????????????? }
??????????????? //写入新UpdateConfig.xml升级完毕后替换
??????????????? if (newVersionExist)
??????????????? {
??????????????????? serverXmlDoc.Save(tempPath + "UpdateConfig.xml");
??????????????????? if (DialogResult.Yes == MessageBox.Show("有新版本,升级否","提示",MessageBoxButtons.YesNo))
??????????????????? {
??????????????????????? string[] dirs = System.IO.Directory.GetFiles(tempPath,"*.*");
??????????????????????? string fileName;
??????????????????????? foreach (string dir in dirs)
??????????????????????? {
??????????????????????????? fileName = ((dir.Split(Convert.ToChar(@"/")))[dir.Split(Convert.ToChar(@"/")).Length - 1]);
??????????????????????????? if (System.IO.File.Exists(desPath + fileName))
??????????????????????????? {
??????????????????????????????? //TODO:可以支持备份以前版本
??????????????????????????????? System.IO.File.Delete(desPath + fileName);
??????????????????????????? }
??????????????????????????? //TODO:如果系统正在运行,您得停止系统,至于如何停止,也许可以使用System.Diagnostics.Process
??????????????????????????? System.IO.File.Move(dir,desPath + fileName);
??????????????????????? }
??????????????????????? MessageBox.Show("升级完毕");
??????????????????? }
??????????????????? else
??????????????????? {
??????????????????????? //TODO:可以支持重新提示升级
??????????????????? }
??????????????? }
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? throw new Exception("升级失败,原因是:" + ex.Message,ex);
??????????? }
??????? }

2.3 运新更新
???????????
string path = Application.StartupPath;
??????????? this.VersionCheck(path,"http://localhost:4011/AppUpdate/WebService.asmx");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读