WCF 字节数据传输
准备工作
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();
- }
- }
请求示例结果:
WCF 字节数据传输的更多相关文章
- wcf,socket,数据传输方式
WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web服务..net Remoting.消息队列和Enterprise Servic ...
- WCF全双工数据传输
项目结构: 客户端: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- 解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接
开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决 ...
- 转:wcf大文件传输解决之道(2)
此篇文章主要是基于http协议应用于大文件传输中的应用,现在我们先解析下wcf中编码器的定义,编码器实现了类的编码,并负责将Message内存中消息转变为网络发送的字节流或者字节缓冲区(对于发送方而言 ...
- 在 WCF 中使用高效的 BinaryFormatter 序列化
本文将定义一个 WCF 终结点行为扩展,以在 WCF 中使用更高效的 BinaryFormatter 进行二进制序列化,并实现对是否使用传统二进制序列化功能的可配置. 介绍 实现步骤 使用方法 效果 ...
- (3)I2C总线的字节格式,时钟同步和仲裁
字节格式 发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整 ...
- 基于WCF 的远程数据库服务访问技术
原文出处:http://www.lw80.cn/shuji/jsjlw/13588Htm.Htm摘要:本文介绍了使用WCF 建立和运行面向服务(SOA)的数据库服务的系统结构和技术要素,分析了WCF ...
- WPF版的权限管理系统
好多技术人员都有一个通病,不关注用户的需求,产品的可用性,只看使用的技术的新不新,潮不潮,这就是所谓的技术发烧友. 这段时间,断断续续的开发一个WPF的软件,也拿出来Show一下.要不放在硬盘里就发霉 ...
- Socket实现仿QQ聊天(可部署于广域网)附源码(2)-服务器搭建
1.前言 这是本系列的第二篇文章,第一篇文章得到了很多朋友们的支持,在这里表示非常的感谢.对于这一系列文章需要补充的是这只是一篇入门级别的Socket通信文章,对于专业人员来说完全可以跳过.本文只介绍 ...
随机推荐
- sass02
新建一个文件夹 1 cd 进入文件夹 ,cd E:\360data\重要数据\桌面\sass, 2 compass creat hello:当前目录创建sass工程, 3 sass文件夹放置sass文 ...
- Sqoop 的优势
1.sqoop可以高效的可控的利用资源,比如它可以通过调整任务数,来控制任务的并发度,另外还可以配置数据库的访问时间等等 2.sqoop能自动的完成数据类型的映射与转换 3.它支持多种数据库,比如my ...
- C#读写config配置文件--读取配置文件类
一:通过Key访问Value的方法: //判断App.config配置文件中是否有Key(非null) if (ConfigurationManager.AppSettings.HasKeys()) ...
- 参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码
第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...
- stat---显示文件的状态信息
stat命令用于显示文件的状态信息.stat命令的输出信息比ls命令的输出信息要更详细. 语法 stat(选项)(参数) 选项 -L:支持符号连接: -f:显示文件系统状态而非文件状态: -t:以简洁 ...
- WinSocket 编程
套接字 套接字指通信双方在通信时所使用的通信点(Endpoint),通信的双方通过通信点来交换信息和数据.不同类型的通信会使用不同的类型通信点,比如对于电话通信而言,通信点就是电话号码和分机号码的组合 ...
- hadoop实验:求气象数据的最低温度
1.下载部分数据.由于实验就仅仅下载2003年的部分气象数据 2.通过zcat *gz > sample.txt命令解压重定向 [hadoop@Master test_data]$ zcat * ...
- 【Oracle】使用bbed恢复delete的数据
表中的数据被delete之后并不会真正删除数据,而是打了一个删除标记,仅仅要还没有被覆盖就能够恢复回来. 实验步骤例如以下: SYS@ORCL>create table bbed_test(x ...
- OL记载Arcgis Server切片
概述: 本文讲述怎样在OpenLayers中调用Arcgis Server切片并显示. 思路: 在OpenLayers中载入Arcgis Server切片用XYZ图层,Arcgis Server的切片 ...
- linux 进程等待 wait 、 waitpid
waitpid() 与 wait() 功能相似,都是用户主进程等待子进程结束或中断. 可用于进程之间的同步 wait 函数原型 pid_t wait(int *status); 函数说明 wait() ...