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通信文章,对于专业人员来说完全可以跳过.本文只介绍 ...
随机推荐
- .Net 跳转
Action正常跳转 <a href="@Url.Action("AppDownload")">点击下载APP</a> public A ...
- 80.简单搭建nodeJS服务,访问本地站点文件
转自:https://blog.csdn.net/iteye_1217/article/details/82679843 搭建nodejs服务器步骤: 1.安装nodejs服务(从官网下载安装),no ...
- spring security源码分析心得
看了半天的文档及源码,终于理出了spring-security的一些总体思路,spring security主要分认证(authentication)和授权(authority). 1.认证authe ...
- Linq中where查询
Linq的Where操作包括3种形式:简单形式.关系条件形式.First()形式. 1.简单形式: 例:使用where查询在北京的客户 var q = from c in db.Customers ...
- jQuery中四种事件监听的区别
原文链接:点我 我们知道jquery提供了四种事件监听方式,分别是bind.live.delegate.on,下面就分别对这四种事件监听方式分析. 已知有4个列表元素: 列表元素1 列表元素2 列表元 ...
- 实现人脸识别性别之路---网页上的video标签
<video> 元素支持三种视频格式: MP4, WebM, 和 Ogg.但是,不同的浏览器对视频格式的支持也不一致,因此为了让浏览器都适应,我们使用source属性来对视频文件格式定义 ...
- JS 中 this 与闭包的结合产生的问题
代码片段一: var name = "The Window"; var object = { name : "My Object", getNameFunc : ...
- POJ——T3160 Father Christmas flymouse
Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3496 Accepted: 1191 缩点,然后每个新点跑一边SPFA ...
- 出乎意料的else语句
在python中你可能时不时不碰到else语句用在while和for循环中,请不要吃惊,先看看它的作用吧! 实际上在循环语句中,else子句仅仅会在循环完毕后运行.即跳出循环的操作.如break,同一 ...
- 基于x86平台的Solaris安装视频(时长25分钟)
基于X86平台的Solaris安装视频 本视频分为三个部分分别在附件中1.2.3(第三部分附件较大请在这里下载:http://down.51cto.com/data/263614) ,远程连接的视频由 ...