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

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

    服务端:

    客户端:

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

    源码下载

  • 相关阅读:
    VMware 虚拟机扩容磁盘
    记录一次Jenkins多分支构建问题
    ceph 集群快速部署
    阿里云EMAS发布套餐订阅云服务
    我研究过的OA产品这是简单的总结
    Hello,OA!Hello,工作流!寻找OA和工作流的旅途记录
    疑难杂症1-去掉网站里的特殊编码&#65279
    IIS 平台NET无后缀名伪静态实现办法
    让人无语的面试题!!排序!你试试?
    优秀的大企业报告辅助撰写系统介绍
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/4653830.html
Copyright © 2011-2022 走看看