我们一起学习WCF 第六篇文件传输
Posted 260250932
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们一起学习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);//调用服务端进行上传
第六步:运行客户端查看效果
服务端:
客户端:
不懂的可以参考源码或者留言。
以上是关于我们一起学习WCF 第六篇文件传输的主要内容,如果未能解决你的问题,请参考以下文章