我们一起学习WCF 第六篇文件传输

原文? http://www.cnblogs.com/LipeiNet/p/4653830.html

?

前言:文件的输出我们并不陌生,但是今天我写的是用wcf模式进行文件传输,我觉得一大好处就是能进行服务器的监听。ok,现在来看看文件传输需要什么:第一需要传输的信息(文件名,流等)第二需要传输状态(是否传输成功,传输失败返回的信息)下面用图详细的表示下

第一步:先定义两个类

1 [MessageContract]

2
public
class ResultMessage

3 {

4 [MessageHeader]

5
public
string ErrorMessage { set; get; }

6 [MessageBodyMember]

7
public
bool IsTrue { set; get; }

8 }

返回结果类

1 [MessageContract]

2
public
class StreamMessage

3 {

4 [MessageHeader]

5
public
string FileName { set; get; }

6 [MessageBodyMember]

7
public Stream TransferStream { set; get; }

8 }

传输类

第二步:定义契约 ResultMessage UploadFile(StreamMessage message);

第三步:我们来实现这个契约

1:创建文件保存的路径

string uploadPath = @"E:\WCF\Service\";string savePath = @"File\";

2:接收流并保存在指定文件下

3:显示传输状态

using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))

{

message.TransferStream.CopyTo(fileStream);

fileStream.Flush();

fileStream.Close();

resultInfo.IsTrue = true;

Console.WriteLine("成功接收客户端传来文件{0} {1}", message.FileName,DateTime.Now.ToString());

}

第四步:实现服务端

其他和前几篇保持不变但是要修改BasicHttpBinding如下

BasicHttpBinding binding = new BasicHttpBinding();

//开启流传输模式

binding.TransferMode = TransferMode.StreamedRequest;

binding.MaxBufferSize = 1024;

//设置传输最大的范围

binding.MaxReceivedMessageSize = 1024*1024*1024;

第五步:开启服务客户端引用服务

1:选择上传文件(以下为核心代码)

OpenFileDialog dfl = new OpenFileDialog();

dfl.Multiselect = true;//多选

dfl.Filter = "所有文件|*.*";//筛选文件类型文本文件(*.txt)|*.txt|所有文件(*.*)|*.*

2:进行上传(以下为核心代码)

FileStream fileStream = new FileStream(lbl_show.Text, FileMode.Open, FileAccess.Read)//文件转换成流

WinClient.IStream clientStream = new StreamClient();

WinClient.StreamMessage SMA = new WinClient.StreamMessage();

SMA.TransferStream = fileStream;

WinClient.ResultMessage message = await clientStream.UploadFileAsync(SMA);//调用服务端进行上传

第六步:运行客户端查看效果

服务端:

客户端:

不懂的可以参考源码或者留言。

源码下载

时间: 2024-07-31 16:39:32

我们一起学习WCF 第六篇文件传输的相关文章

[老老实实学WCF] 第六篇 元数据交换

原文:[老老实实学WCF] 第六篇 元数据交换 老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个终结点上建立通道从而进行通信.我们通过手写代码(或配置)的方式为服务端编写了元数据信息,没有借助元数据交换就实现了通信.然而在实际应用中,元数据往往是很多的,而且重复编写元数据的工作也是不值得的,因此必然会用到元数据交换的方式让客户端获取元数据,本篇我们就来进一步了解一下元数

重温WCF之流与文件传输(七)

WCF开启流模式,主要是设置一个叫TransferMode的属性,所以,你看看哪些Binding的派生类有这个属性就可以了. TransferMode其实是一个举枚,看看它的几个有效值: Buffered:缓冲模式,说白了就是在内存中缓冲,一次调用就把整个消息读/写完,也就是我们最常用的方式,就是普通的操作协定的调用方式: StreamedRequest:只是在请求的时候使用流,说简单一点就是在传入方法的参数使用流,如 int MyMethod(System.IO.Stream stream);

我们一起学习WCF 第三篇头消息验证用户身份

前言:今天我主要写的是关于头消息的一个用处验证用户信息 下面我画一个图,可以先看图 第一步:我们先开始做用户请求代码 首先:创建一个可执行的上下文对象块并定义内部传输的通道 using (OperationContextScope scope = new OperationContextScope(userClient.InnerChannel)) 然后:创建头消息 要发送的SOAP传输的内容 MessageHeader myHeaderUid = MessageHeader.CreateHea

Scala2.11.7学习笔记(六)文件操作

欢迎访问:鲁春利的工作笔记,学习是一种信仰,让时间考验坚持的力量. 1.读取文件 import scala.io.Source; if (args.length > 0) {     for (line <- Source.fromFile(args(0)).getLines()) {         println(line.length + "\t" + line);     } } else {     Console.err.println("Please

我们一起学习WCF 第十篇Wcf中实现事物

数据一致性在工作中显得非常重要,有时候我们库中出现脏数据导致程序报错,但是又很难发现这样的错误,所以为了数据的完整性建议在程序中加入事物. 什么是事物:我们都有团队合作吧,比喻团队有3个人,a负责设计,b负责前端,c负责后台,那么他们三个就是一个整体,哪一个人那里出了问题就要被打回. 第一步:我们开始定义个一个接口 [ServiceContract] public interface IUserInfo { [OperationContract] int AddInfo(); } 第二步当然是实

我们一起学习WCF 第七篇会话模式

会话:就是客户端和服务端之间的谈话.比喻A和B去登陆网站,那么A用户登陆进去肯定显示A的用户详情,那么这就是A和服务器之间的交流.同样B用户登陆之后显示B的详情,这就表示这是B和服务器之间的交流. 如果A会话结束那么服务器就会忘记A用户的请求,也就看不到A的信息.WCF会话有三种模式下面我用图表示 1:建立会话应具备的条件 A:需要支持会话的绑定(basicHttpBinding不支持会话绑定,所以建立会话那么这个绑定必须要支持会话.而wsHttpBinding和NetTcpBinding支持会

Perl学习笔记(六)--文件(一)

一.文件描述符: 访问文件时用来代表文件的数字. 它是系统资源,系统限制打开的文件描述符数量. Perl中只在某些系统调用时才使用它 文件句柄: 功能同文件描述符,但是与文件描述符不是一个东西. Perl使用文件句柄代表文件. 文件描述符与文件句柄互相转化: 文件句柄=>文件描述符:fileno(F):返回文件描述符 文件描述符=>文件句柄:open(F,”>&n”); 二.文件变量     文件:存放在磁盘上,永久存储数据,用于读写访问.访问前要先打开文件,结束后关闭文件. o

我们一起学习WCF 第四篇单通讯和双向通讯

前言:由于个人原因很久没有更新这个系列了,我会继续的更新这系列的文章.这一章是单向和双向通讯.所谓的单向就是只有发送却没有回复,双向是既有发送还有回复.就是有来无往代表单向,礼尚往来表示双向.下面我用一个简单用例图表示一下(其中一个老师很严厉说的话大家都默默接受,另一个则相反) 首先我们先看单向通讯: 第一步:编写服务协定 1 [ServiceContract(Namespace = "singleTrans")] 2 public interface ITeacher 3 { 4 [

MySQL数据库学习【第六篇】表与表之间的关系

表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记录也可以对应表1的一条记录 一对一: 表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了 1.先确立关系 2.找到多的一方,吧关联字段写在多的一方 一.多对一或者一对多(左边表的多条记录对应右边表的唯一一条记录)