IServiceUpdate

  1. using System.IO;
  2. using System.ServiceModel;
  3. using System.ServiceModel.Web;
  4.  
  5. namespace ServiceUpdater
  6. {
  7. // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IServiceUpdate”。
  8. [ServiceContract]
  9. public interface IServiceUpdate
  10. {
  11. [OperationContract, WebInvoke(Method = "GET", UriTemplate = "SyncTool/{fileName}")]
  12. Stream SyncTool(string fileName);
  13.  
  14. [OperationContract, WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]
  15. Stream DownloadFile(PostData postData);
  16. }
  17.  
  18. public class PostData
  19. {
  20. public string CustomerCode { get; set; }
  21. public string Token { get; set; }
  22. public string Mac { get; set; }
  23. public string Filename { get; set; }
  24. }
  25. }

ServiceUpdate

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.Serialization;
  6. using System.ServiceModel;
  7. using System.ServiceModel.Web;
  8. using System.Text;
  9. using log4net;
  10.  
  11. namespace ServiceUpdater
  12. {
  13. // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“ServiceUpdate”。
  14. public class ServiceUpdate : IServiceUpdate
  15. {
  16. public Stream SyncTool(string fileName)
  17. {
  18. string basePath = AppDomain.CurrentDomain.BaseDirectory + "Release\\SyncTool\\";
  19. string downloadFileName = basePath + fileName;
  20. if (File.Exists(downloadFileName) && WebOperationContext.Current != null)
  21. {
  22. var fileExt = Path.GetExtension(downloadFileName);
  23. switch (fileExt.ToLower())
  24. {
  25. case ".js":
  26. WebOperationContext.Current.OutgoingResponse.ContentType = "text/javascript";
  27. break;
  28. case ".css":
  29. WebOperationContext.Current.OutgoingResponse.ContentType = "text/css";
  30. break;
  31. case ".html":
  32. case ".htm":
  33. WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
  34. break;
  35. }
  36. LogManager.GetLogger(this.GetType()).Info("File downloaded = " + downloadFileName);
  37. return File.OpenRead(downloadFileName);
  38. }
  39. return null;
  40. }
  41.  
  42. public Stream DownloadFile(PostData postData)
  43. {
  44. if (postData != null
  45. && !string.IsNullOrEmpty(postData.CustomerCode)
  46. && !string.IsNullOrEmpty(postData.Token)
  47. && !string.IsNullOrEmpty(postData.Mac)
  48. && !string.IsNullOrEmpty(postData.Filename))
  49. {
  50. string downFilename = AppDomain.CurrentDomain.BaseDirectory + "Release\\" + postData.CustomerCode + "\\" + postData.Filename;
  51. if (File.Exists(downFilename))
  52. {
  53. LogManager.GetLogger(this.GetType()).Info(
  54. "File download = " + downFilename
  55. + Environment.NewLine + "CustomerCode = " + postData.CustomerCode
  56. + Environment.NewLine + "Token = " + postData.Token
  57. + Environment.NewLine + "Mac = " + postData.Mac);
  58. return File.OpenRead(downFilename);
  59. }
  60. }
  61. return null;
  62. }
  63. }
  64. }

WCF实现客户端自动更新的更多相关文章

  1. WCF实现客户端自动更新-GenerateFileList

    GenerateFileList using System; using System.Collections.Generic; using System.Diagnostics; using Sys ...

  2. svn服务器端的客户端自动更新

    先说这个方式的一个弊端,那就是服务器端这边代码不能与svn服务器出现冲突,一旦冲突就失效. 实现原理是,利用svn版本库,hooks目录的bat钩子开展工作. 共在hooks目录下建立3个文件如下:p ...

  3. SVN----------项目服务器上的svn客户端自动更新设置。

    1.局域网服务器上搭建了PHP项目运行的环境,然后怎么样讲根目录拉去到的项目可以随着开发人员提交的代码,自动更新成最新的代码. 2.首先将svn版本库上的代码拉取到www目录下或者你的根目录. 3.然 ...

  4. WindowsForm客户端自动更新逻辑

    启动客户端的时候,单独开一个线程,该线程主要是判断指定服务器上的更新包和本地使用的客户端是否一致,是否需要更新,不需要更新,则退出,需要更新则从服务端的下载更新包,然后提示用户是否更新,点击更新,启动 ...

  5. c#客户端自动更新模块

    一.概述 将需要更新的文件上传到服务器端,然后客户端从服务器下载更新文件并覆盖本地文件. 二.功能模块 1.将更新文件放入指定文件夹,检测更新,生成更新配置文件,并上传到服务器 2.获取服务器的更新配 ...

  6. Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序

    写了一个自动更新服务网站和自动更新客户端.基本功能测试完毕.记录下 项目地址:https://github.com/TeemoHQ/AutoUpdate 需求 自动集成,回退版本,守护进程,服务端操作 ...

  7. 游戏《Minecraft》或其他应用程序 实现 自动更新 客户端版本

    本渣又来写(水)博客了. 先说一下,我这个解决方案的安全性并不是企业级的,咱们就是一群穷开服的Minecraft玩家. 如果你要投入到企业级应用(容易被黑客攻击的场景),请自己写,思路凑合看看.不然安 ...

  8. Winform实现客户端的自动更新

              话不多说,直接上干货.当然也希望各位前辈多多指导. 自动更新客户端的设计原理图 请花两分钟时间,仔细阅读下面这张图,明白客户端自动升级的原理.        自动更新的效果图 1. ...

  9. PCB WCF Web接口增减参数后,在客户端不更新的情况,是否影响客户端,评估测试

    1.目的:由于接口众多,服务端变更接口,会造成服务停用更新,造成客户端不能使用或报错, 在此评估[Web中心]此服务端,接口接口参数增加或减少,是否对客户端造成影响 2.评估内容:服务端增加单值参数, ...

随机推荐

  1. jquery动画基础

    根据id改变字体大小的动画 <div class="speech">样式切换</div> <div id="switcher"&g ...

  2. ijg库的使用的几点注意

    ijg库(http://www.ijg.org/)是用于处理jpeg解码和压缩的库,最新版本为2014发布的版本,可以在官网中下载jpegsr9a.zip 使用vs中个nmake 进行编译,对于这个版 ...

  3. java日期操作大全

    摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http ...

  4. java selenium 题目二 如何处理Table

    如果操作Table.  例如我有一个table.  table 的列的顺序是会变化的, 行数也是会变化的. 问题: 如果通过名字获取到年龄 HTML 源代码 <html> <body ...

  5. JAVA 十六进制与字符串的转换

    public static String toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式.如果参数为负,那么无符号整数值为参数加上 232:否则等于该参 ...

  6. ORM原型概念

    ORM[Object-Relation-Mapping]对象关系映射. 这个名词已经出来好几年了.已经不陌生.  以前在项目中针对相对复杂业务逻辑时一般采用领域模型驱动方式进行业务概述,分析和建模. ...

  7. WCF初探-24:WCF序列化和反序列化

    前言 WCF包含很多封装的内部机制,这些是我们在编写程序时不会经常看到的.比如上一篇讲解的Message.这一篇我将讲解WCF的另一种内部机制,WCF的序列化和反序列化.通常我们在编写WCF服务程序的 ...

  8. 为什么使用 Bootstrap?

    为什么使用 Bootstrap? 移动设备优先:自 Bootstrap 3 起,框架包含了贯穿于整个库的移动设备优先的样式. 浏览器支持:所有的主流浏览器都支持 Bootstrap.      容易上 ...

  9. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  10. Android - PopupWindow

    PopupWindow就是一个可以显示在当前界面上的浮动容器,它可以用来显示任意一个View,同时还可以指定显示的位置. 下面写一个显示下拉的例子: PopupWindow mpopupWindow; ...