WCF实现客户端自动更新

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 }
时间: 2024-10-07 02:17:03

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

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

GenerateFileList 1 using System; 2 using System.Collections.Generic; 3 using System.Diagnostics; 4 using System.IO; 5 6 namespace GenerateFileList 7 { 8 public class Generator 9 { 10 private readonly string _appPath = AppDomain.CurrentDomain.BaseDire

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

先说这个方式的一个弊端,那就是服务器端这边代码不能与svn服务器出现冲突,一旦冲突就失效. 实现原理是,利用svn版本库,hooks目录的bat钩子开展工作. 共在hooks目录下建立3个文件如下:post-commit.bat 作用是:钩子入口!postcommit.log 作用是:记录最后一次执行的结果(可以记录最后一次报错)建立一个空文件就好!post-commit-run.bat 作用是:自动更新的核心部分! post-commit.bat的代码是: call %~dp0post-com

统一关闭域客户端自动更新服务

配置策略1: 客户端测试: 配置策略2: 客户端验证:

【原创】我所理解的自动更新-客户端更新流程

创建更新线程,跟ui主线程通过message进行交互.1,去http://version.mygame.com/check.php? channelid=%d&appver=%d&resver=%d获取客户端最新版本信息.用curl获取,代码如下,至于curl的具体参数,man或者搜索引擎会告诉你答案 1 static size_t funcGetHttpText(void *ptr, size_t size, size_t nmemb, void *userdata) { 2 size_

关于cocos2dx客户端程序的自动更新解决方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 随着手机游戏的不断发展,游戏包也越来越大,手机网络游戏已经超过100M了,对于玩家来说,如果每次更新都要重新下载,那简直是灾难.而且如果上IOS平台,每次重新发包都要审核,劳神费力.所以当前的主流手游都开始提供自动更新的功能,在不改动C++代码的前提下,使用lua或者js进行业务逻辑开发,然后自动更新脚本和资源,方便玩家也方便研发者. 以前做端游的时候,自动更新是一个大工程,不仅要能更新资源和脚本,还要

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

1.目的:由于接口众多,服务端变更接口,会造成服务停用更新,造成客户端不能使用或报错, 在此评估[Web中心]此服务端,接口接口参数增加或减少,是否对客户端造成影响 2.评估内容:服务端增加单值参数,服务端减少单个值参数,Mod对象增加参数,Mod对象减少参数, (而Json数据类型在此不作评估内容,是因为Json对象反序列化具有很好的伸缩型,不会影响客户端调用方) 3.附PCB工程系统集成示意图: 一.Web服务端增加单个值参数 改前-- 服务端(1个参数): /// <summary> /

Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创建版本库 svnadmin create /home/myrepos    //这里的文件目录自己随便设置 3,配置svnserve 上述版本库/home/myrepos建立后在文件夹下会生成conf文件夹,进入/home/myrepos/conf下面会有下面3个文件 authz passwd 

svn自动更新服务器最新代码

1.很简单打开dos界面 cd到svn exe目录下,运行 cd C:\Program Files\TortoiseSVN\bin    --svn安装目录(作者使用时TortoiseSVN客户端,其他客户端未测试过)start TortoiseProc.exe /command:update /path:"F:\_xxx_svn\branches\xxxxx" /closeonend:3 update是命令,/path后面是同步路径start TortoiseProc.exe /co

eclipes创建一个web项目web.xml不能自动更新的原因(web.xml和@WebServlet的作用)

在eclipse中创建一个Web项目的时候,虽然有web.xml生成,但是再添加Servlet类文件的时候总是看不见web.xml的更新,所以异常的郁闷!上网查了查,原来我们在创建Web项目的时候,会弹出一个对话框,“Dynamic web module version”这个选项默认成了3.0,按照老规范,应该是在eclipse的WebContent \ WEB-INF \ 目录下创建web.xml的.而新规范是可以不用web.xml的,如tomcat 7.0就支持新规范,这样相关的servle