准备工作

1.新建一个工程,添加一个WCF服务库, 然后公共的类库, 添加一个默认可序列化的的CompositeType类用于压缩。

  1. [Serializable]
  2. public class CompositeType
  3. {
  4. bool boolValue = true;
  5. string stringValue = "Hello ";
  6.  
  7. public bool BoolValue
  8. {
  9. get { return boolValue; }
  10. set { boolValue = value; }
  11. }
  12.  
  13. public string StringValue
  14. {
  15. get { return stringValue; }
  16. set { stringValue = value; }
  17. }
  18. }

2.在默认的服务接口中添加一个测试接口用于测试数据传输

  1. [ServiceContract]
  2. public interface IService1
  3. {
  4. [OperationContract]
  5. byte[] GetByteTest(byte[] byt);
  6.  
  7. }

实现>.

  1. public class Service1 : IService1
  2. {
  3. public byte[] GetByteTest(byte[] objectArrar)
  4. {
  5. //解压客户端返回数据
  6. Common.CompositeType user = (Common.CompositeType)ZipTools.DecompressionObject(objectArrar);
  7. //压缩当前解压数据
  8. return ZipTools.CompressionObject(user);
  9. }
  10. }

示例中用到的压缩解压具体实现如下:

  1.      /// <summary>
  2. /// 压缩方法
  3. /// </summary>
  4. /// <param name="DataOriginal"></param>
  5. /// <returns></returns>
  6. public static byte[] CompressionObject(object DataOriginal)
  7. {
  8. if (DataOriginal == null) return null;
  9. BinaryFormatter bFormatter = new BinaryFormatter();
  10. MemoryStream mStream = new MemoryStream();
  11. bFormatter.Serialize(mStream, DataOriginal);
  12. byte[] bytes = mStream.ToArray();
  13. MemoryStream oStream = new MemoryStream();
  14. DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress);
  15. zipStream.Write(bytes, , bytes.Length);
  16. zipStream.Flush();
  17. zipStream.Close();
  18. return oStream.ToArray();
  19. }
  20.  
  21. /// <summary>
  22. /// 解压方法
  23. /// </summary>
  24. /// <param name="bytes"></param>
  25. /// <returns></returns>
  26. public static object DecompressionObject(byte[] bytes)
  27. {
  28. if (bytes == null) return null;
  29. MemoryStream mStream = new MemoryStream(bytes);
  30. mStream.Seek(, SeekOrigin.Begin);
  31. DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
  32. object dsResult = null;
  33. BinaryFormatter bFormatter = new BinaryFormatter();
  34. dsResult = (object)bFormatter.Deserialize(unZipStream);
  35. return dsResult;
  36. }

服务端已经完成, 挂载发布, 可以新建一个客户端控制进行数据测试 ~

新建一个控制台应用程序,  添加引用发布的WCF服务测试地址, 添加客户端代码:

示例:提交   最开启新建的类经过压缩处理 服务端再把请求的信息返回, 用于测试验证, 如下

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
  6.  
  7. //本地压缩数据提交字节数据
  8. byte[] ServiceArray = client.GetByteTest(ZipTools.CompressionObject(new Common.CompositeType()
  9. {
  10. BoolValue = true,
  11. StringValue = "测试数据"
  12. }));
  13. //解压服务端字节数据
  14. CompositeType cmp = (CompositeType)ZipTools.DecompressionObject(ServiceArray);
  15. Console.WriteLine("返回数据打印列表:");
  16. Console.WriteLine(cmp.BoolValue);
  17. Console.WriteLine(cmp.StringValue);
  18.  
  19. Console.ReadKey();
  20. }
  21. }

请求示例结果:

WCF 字节数据传输的更多相关文章

  1. wcf,socket,数据传输方式

    WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web服务..net Remoting.消息队列和Enterprise Servic ...

  2. WCF全双工数据传输

    项目结构: 客户端: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  3. 解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接

    开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决 ...

  4. 转:wcf大文件传输解决之道(2)

    此篇文章主要是基于http协议应用于大文件传输中的应用,现在我们先解析下wcf中编码器的定义,编码器实现了类的编码,并负责将Message内存中消息转变为网络发送的字节流或者字节缓冲区(对于发送方而言 ...

  5. 在 WCF 中使用高效的 BinaryFormatter 序列化

    本文将定义一个 WCF 终结点行为扩展,以在 WCF 中使用更高效的 BinaryFormatter 进行二进制序列化,并实现对是否使用传统二进制序列化功能的可配置. 介绍 实现步骤 使用方法 效果 ...

  6. (3)I2C总线的字节格式,时钟同步和仲裁

    字节格式 发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整 ...

  7. 基于WCF 的远程数据库服务访问技术

    原文出处:http://www.lw80.cn/shuji/jsjlw/13588Htm.Htm摘要:本文介绍了使用WCF 建立和运行面向服务(SOA)的数据库服务的系统结构和技术要素,分析了WCF ...

  8. WPF版的权限管理系统

    好多技术人员都有一个通病,不关注用户的需求,产品的可用性,只看使用的技术的新不新,潮不潮,这就是所谓的技术发烧友. 这段时间,断断续续的开发一个WPF的软件,也拿出来Show一下.要不放在硬盘里就发霉 ...

  9. Socket实现仿QQ聊天(可部署于广域网)附源码(2)-服务器搭建

    1.前言 这是本系列的第二篇文章,第一篇文章得到了很多朋友们的支持,在这里表示非常的感谢.对于这一系列文章需要补充的是这只是一篇入门级别的Socket通信文章,对于专业人员来说完全可以跳过.本文只介绍 ...

随机推荐

  1. sass02

    新建一个文件夹 1 cd 进入文件夹 ,cd E:\360data\重要数据\桌面\sass, 2 compass creat hello:当前目录创建sass工程, 3 sass文件夹放置sass文 ...

  2. Sqoop 的优势

    1.sqoop可以高效的可控的利用资源,比如它可以通过调整任务数,来控制任务的并发度,另外还可以配置数据库的访问时间等等 2.sqoop能自动的完成数据类型的映射与转换 3.它支持多种数据库,比如my ...

  3. C#读写config配置文件--读取配置文件类

    一:通过Key访问Value的方法: //判断App.config配置文件中是否有Key(非null) if (ConfigurationManager.AppSettings.HasKeys()) ...

  4. 参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码

    第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...

  5. stat---显示文件的状态信息

    stat命令用于显示文件的状态信息.stat命令的输出信息比ls命令的输出信息要更详细. 语法 stat(选项)(参数) 选项 -L:支持符号连接: -f:显示文件系统状态而非文件状态: -t:以简洁 ...

  6. WinSocket 编程

    套接字 套接字指通信双方在通信时所使用的通信点(Endpoint),通信的双方通过通信点来交换信息和数据.不同类型的通信会使用不同的类型通信点,比如对于电话通信而言,通信点就是电话号码和分机号码的组合 ...

  7. hadoop实验:求气象数据的最低温度

    1.下载部分数据.由于实验就仅仅下载2003年的部分气象数据 2.通过zcat *gz > sample.txt命令解压重定向 [hadoop@Master test_data]$ zcat * ...

  8. 【Oracle】使用bbed恢复delete的数据

    表中的数据被delete之后并不会真正删除数据,而是打了一个删除标记,仅仅要还没有被覆盖就能够恢复回来. 实验步骤例如以下: SYS@ORCL>create table bbed_test(x  ...

  9. OL记载Arcgis Server切片

    概述: 本文讲述怎样在OpenLayers中调用Arcgis Server切片并显示. 思路: 在OpenLayers中载入Arcgis Server切片用XYZ图层,Arcgis Server的切片 ...

  10. linux 进程等待 wait 、 waitpid

    waitpid() 与 wait() 功能相似,都是用户主进程等待子进程结束或中断. 可用于进程之间的同步 wait 函数原型 pid_t wait(int *status); 函数说明 wait() ...