IServiceUpdate

 using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web; namespace ServiceUpdater
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IServiceUpdate”。
[ServiceContract]
public interface IServiceUpdate
{
[OperationContract, WebInvoke(Method = "GET", UriTemplate = "SyncTool/{fileName}")]
Stream SyncTool(string fileName); [OperationContract, WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json)]
Stream DownloadFile(PostData postData);
} public class PostData
{
public string CustomerCode { get; set; }
public string Token { get; set; }
public string Mac { get; set; }
public string Filename { get; set; }
}
}

ServiceUpdate

 using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using log4net; namespace ServiceUpdater
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“ServiceUpdate”。
public class ServiceUpdate : IServiceUpdate
{
public Stream SyncTool(string fileName)
{
string basePath = AppDomain.CurrentDomain.BaseDirectory + "Release\\SyncTool\\";
string downloadFileName = basePath + fileName;
if (File.Exists(downloadFileName) && WebOperationContext.Current != null)
{
var fileExt = Path.GetExtension(downloadFileName);
switch (fileExt.ToLower())
{
case ".js":
WebOperationContext.Current.OutgoingResponse.ContentType = "text/javascript";
break;
case ".css":
WebOperationContext.Current.OutgoingResponse.ContentType = "text/css";
break;
case ".html":
case ".htm":
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
break;
}
LogManager.GetLogger(this.GetType()).Info("File downloaded = " + downloadFileName);
return File.OpenRead(downloadFileName);
}
return null;
} public Stream DownloadFile(PostData postData)
{
if (postData != null
&& !string.IsNullOrEmpty(postData.CustomerCode)
&& !string.IsNullOrEmpty(postData.Token)
&& !string.IsNullOrEmpty(postData.Mac)
&& !string.IsNullOrEmpty(postData.Filename))
{
string downFilename = AppDomain.CurrentDomain.BaseDirectory + "Release\\" + postData.CustomerCode + "\\" + postData.Filename;
if (File.Exists(downFilename))
{
LogManager.GetLogger(this.GetType()).Info(
"File download = " + downFilename
+ Environment.NewLine + "CustomerCode = " + postData.CustomerCode
+ Environment.NewLine + "Token = " + postData.Token
+ Environment.NewLine + "Mac = " + postData.Mac);
return File.OpenRead(downFilename);
}
}
return null;
}
}
}

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. 原!!jar包 --可执行exe文件--安装包

    这几天由于部门统计名单,都是一边报,一边统计,感觉麻烦,写了个小工具,做成安装包.其他不多说,网上都有,我就自己按照网上操作,碰到了一些问题,对这些问题说下. ----------废话少说------ ...

  2. SQL Server如何删除多余tempDB文件

    某时,创建了多个tempDB文件,已经超过了服务器核心数,现象删除tempDB文件,使其保持与CPU核心数相同.但是在删除的时候,发现无法删除,报出错误:无法删除文件“tempdev3”,因为它不能为 ...

  3. IndexOutOfBoundsException ArrayList 访问越界

    java.lang.IndexOutOfBoundsException: Index: 3, Size: 2

  4. NGUI UIToggle

    NGUI UIToggle 1.add a UI Toggle(Script) and UI Toggle Objects(Script) to a Tab Button(Which has a UI ...

  5. [hadoop] 一些基础概念

    一.云的概念 1.云计算的概念 随时 随地 使用任何设备 获得任何服务 2.趋势 )资料开始回归集中处理(存储大量资料) 随时存取 降低遗失风险 减少传输成本 促进团队协作 )网页变为预设开发平台(网 ...

  6. to my friends-Don't give up so fast

    早上听到大学挺要好的朋友突然说要换行,心情就一股莫名的哀伤,因为当初是三个人一起约定好的,要朝着我们共同的目标而努力奋斗的,这股热情怎能这么轻易地被现实的冷水浇灭.没错,我们是刚出社会的毛头小子,我们 ...

  7. Java:多线程<三>死锁、线程间通讯

    死锁: 同步嵌套同步,而且使用的锁不是同一把锁时就可能出现死锁 class Test implements Runnable { private boolean flag; Test(boolean ...

  8. 学习swift开源项目

    如果你是位iOS开发者,或者你正想进入该行业,那么Swift为你提供了一个绝佳的机会.Swift的设计非常优雅,较Obj-C更易于学习,当然也非常强大. 为了指导开发者使用Swift进行开发,苹果发布 ...

  9. cocos2d-x 开头配置(Windows 平台)

    工欲善其事,必先利其器. 要使用 cocos2d-x 引擎,就要配置(或者安装)引擎,到 cocos2d-x 官网下载页下载引擎,官网给了2.x和3.x两个版本,我使用的是3.6的版本,3.x的版本类 ...

  10. win7 下设置时间格式为yyyy-MM-dd 格式无效的解决方法

    部分win7 64位机器,在时间区域部分设置了时间格式为:yyyy-MM-dd后程序和数据库里面还是原来默认的yyyy/MM/dd格式 打开注册表,搜索 yyyy/MM/dd ,修改为yyyy-MM- ...