准备工作

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

   [Serializable]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

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

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        byte[] GetByteTest(byte[] byt);

    }

实现>.

public class Service1 : IService1
    {
        public byte[] GetByteTest(byte[] objectArrar)
        {
            //解压客户端返回数据
            Common.CompositeType user = (Common.CompositeType)ZipTools.DecompressionObject(objectArrar);
            //压缩当前解压数据
            return ZipTools.CompressionObject(user);
        }
    }

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

      /// <summary>
        /// 压缩方法
        /// </summary>
        /// <param name="DataOriginal"></param>
        /// <returns></returns>
        public static byte[] CompressionObject(object DataOriginal)
        {
            if (DataOriginal == null) return null;
            BinaryFormatter bFormatter = new BinaryFormatter();
            MemoryStream mStream = new MemoryStream();
            bFormatter.Serialize(mStream, DataOriginal);
            byte[] bytes = mStream.ToArray();
            MemoryStream oStream = new MemoryStream();
            DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress);
            zipStream.Write(bytes, , bytes.Length);
            zipStream.Flush();
            zipStream.Close();
            return oStream.ToArray();
        }

        /// <summary>
        /// 解压方法
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static object DecompressionObject(byte[] bytes)
        {
            if (bytes == null) return null;
            MemoryStream mStream = new MemoryStream(bytes);
            mStream.Seek(, SeekOrigin.Begin);
            DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
            object dsResult = null;
            BinaryFormatter bFormatter = new BinaryFormatter();
            dsResult = (object)bFormatter.Deserialize(unZipStream);
            return dsResult;
        }

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

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

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

class Program
    {
        static void Main(string[] args)
        {
            ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();

            //本地压缩数据提交字节数据
            byte[] ServiceArray = client.GetByteTest(ZipTools.CompressionObject(new Common.CompositeType()
            {
                BoolValue = true,
                StringValue = "测试数据"
            }));
            //解压服务端字节数据
            CompositeType cmp = (CompositeType)ZipTools.DecompressionObject(ServiceArray);
            Console.WriteLine("返回数据打印列表:");
            Console.WriteLine(cmp.BoolValue);
            Console.WriteLine(cmp.StringValue);

            Console.ReadKey();
        }
    }

请求示例结果:

最新文章

  1. 关于从Activity A跳转到Activity B ,其中Activity A中有一个VideoView,Activity B中有一个MediaPlayer。
  2. 利用线上数据验证系统 Gor
  3. uva 489 Hangman Judge
  4. PHP向mysql中插入数据的方法
  5. 关于ifram之间的相互调用
  6. Struts2(二)---将页面表单中的数据提交给Action
  7. MenuInflater用法
  8. 【安卓】给ViewFlipper加指示器,相似ViewPagerIndicator库提供的那种、!
  9. 本原串(HDU 2197 快速幂)
  10. [Sdoi2017]树点涂色 [lct 线段树]
  11. java:替换字符串中的ASCII码
  12. dojo之dojox/data/CsvStore初始化
  13. 微信退款时候报”请求被中止: 未能创建 SSL/TLS 安全通道“或”The request was aborted: Could not create SSL/TLS secure channel“的错误
  14. java中的全局变量如何实现?ThreadLocal~
  15. 第十二届GOPS全球运维大会2019深圳站即将开幕
  16. 通过cookie记录,设置页面访问的跳转页
  17. POJ.2750.Potted Flower(线段树 最大环状子段和)
  18. C# Excel导数据
  19. .Net实现Windows服务安装完成后自动启动的两种方法
  20. [日常] Go语言圣经--Channel习题

热门文章

  1. JVM-ClassLoader装载class的流程
  2. 智课雅思短语---一、be no exception
  3. AndroidTouchEvent总结
  4. SQL 查找存在某内容的存储过程
  5. Juniper Alarms 灯红色报警处理
  6. Linux系统中命令提示符解释-Linux中命令格式、分类-bash中的快捷键
  7. Java 实现有序链表
  8. [Python] Use Python Classes
  9. Vue的响应原理
  10. java(异常体系及权限修饰符)