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

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

    服务端:

    客户端:

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

    源码下载

  • 相关阅读:
    一个简单的反反爬~
    查缺补漏 -- python 之 and or的优先级
    从今天开始看《Redis深度历险》--HyperLogLog
    从今天开始看《Redis深度历险》--位图
    从今天开始看《Redis深度历险》--延时队列
    从今天开始看《Redis深度历险》--分布式锁
    redis之set【官方文档搬运+翻译】
    从今天开始看《Redis深度历险》--基础
    collections模块学习之namedtuple
    元组赋值谜题
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/4653830.html
Copyright © 2011-2022 走看看