首页 > 学院 > 开发设计 > 正文

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

2019-11-14 15:55:33
字体:
来源:转载
供稿:网友

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

第一步:先定义两个类

1  [MessageContract]2     public class ResultMessage3     {4         [MessageHeader]5         public string ErrorMessage { set; get; }6         [MessageBodyMember]7         public bool IsTrue { set; get; }8     }
返回结果类
1        [MessageContract]2        public class StreamMessage3        {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/";

uploadPath = uploadPath + savePath;

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);//调用服务端进行上传

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

服务端:

客户端:

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

源码下载

 


上一篇:(转)类库框架模式

下一篇:VS远程调试

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表