• 我们一起学习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:WCFService";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);//调用服务端进行上传

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

    服务端:

    客户端:

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

    源码下载

  • 相关阅读:
    java.util报错
    mysql的sql_mode合理设置
    MySQL查询本周、上周、本月、上个月份数据的sql代码
    连接池配置
    js实现内容点击复制
    myeclipse 打开jsp文件出错
    Spring可二次开发常用接口、类及其源码详解
    Redis学习之Redis集群模式缺陷及其处理
    Redis学习之API学习及Jedis源码原理分析
    Redis学习之4种模式实践及机制解析(单机、主从、哨兵、集群)
  • 原文地址:https://www.cnblogs.com/qq260250932/p/5349865.html
Copyright © 2020-2023  润新知