zoukankan      html  css  js  c++  java
  • 我们一起学习WCF 第六篇文件传输

      前言:文件的输出我们并不陌生,但是今天我写的是用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";

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

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

    服务端:

    客户端:

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

    源码下载

  • 相关阅读:
    redis删除指定前缀的缓存
    php生成N个不重复的随机数实例
    Redis数据持久化,安全
    MySQL LOAD DATA
    utf 8无bom和utf 8什么区别
    MySQL直接导出CSV文件,并解决中文乱码的问题
    php 中将完整的年月日时分秒的时间转换成 年月日的形式
    PHP如何根据数组中的键值进行排序
    PHP array_multisort—对多个数组或多维数组进行排序
    sql case 函数与详细说明
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/4653830.html
Copyright © 2011-2022 走看看