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. 报错 for input String ...

    一个String类型的数值后面有空格,如:“10001         ” 要转化成int时用     Integer.parseInt  报错 先用.trim()去掉空格 就可以转换了 这个问题其实 ...

  2. 聊天界面之进度条cell(一)

    ProgressCell用于显示文件传输的进度,困难点在于根据下载进度更新cell的进度条,先后尝试了几种方法: 1.有新的下载进度时,直接调用reloadData() 2.使用reloadRowsA ...

  3. oracle的存储过程和函数(PL/SQL)

    czmmiao 存储过程概述 存储过程是子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库.是一个有名字的PL/SQL代码块,支持接收或不接受参数,同时也支持参数输出.一个存储过程通 ...

  4. [讨论] win7封装时如何直接开通局域网共享

    ekincheng 发表于 2016-10-31 20:17:54 https://www.itsk.com/thread-371838-1-5.html Win7封装时不能像XP那样直接开启局域网共 ...

  5. spring.xml中的配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. C:上台阶

    总时间限制: 1000ms 内存限制: 65536kB描述楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法. ...

  7. React Native 文本输入

    TextInput是一个允许用户输入文本的基础组件.它有一个名为onChangeText的属性,此属性接受一个函数,而此函数会在文本变化时被调用.另外还有一个名为onSubmitEditing的属性, ...

  8. post multipart data boundary问题 使用curl 向jersey post文件

    原以为curl 模拟post file跟post string类似,-d参数一加 ,header一加就完了,这次遇到个问题,却怎么都搞不定. curl模拟post提交 与客户端定的协议是: Heade ...

  9. Using of grep sed awk on Linux

    #This script is to parse data file: fun0() { ## [INFO1]a=1   b=2 c=3 [INFO2]a=7 b=8 c=9 [INFO3] a=x ...

  10. .htaccess语法中RewriteCond和RewriteRule意义

    今天看了301重定向设置的方法,对网站的首页权重有较重要意义.于是看了别人写的.htaccess文件发现一头雾水,于是查了一些资料来进一步理解. RewriteCond语法 RewriteCond T ...