http://blog.csdn.net/bodaowang/article/details/6889446

在webservice中将dataset序列化是我们经常遇到的问题,但是遇到很大的dataset,则网络传输就必须考虑的问题,将dataset处理压缩后传输是我们不错的选择,下面提供这种方法:

第一步:引入命名空间下载DataSetSurrogate组件

using System.IO.Compression;

using System.Runtime.Serialization.Formatters.Binary;

将下载好的DataSetSurrogate放入bin路径下

第二步:压缩序列化

///序列化转化为二进制数组的DataSet

public byte[] GetDataSetSurrogateZipBYtes(DataSet DS)

{

DataSetSurrogate dss = new DataSetSurrogate(DS);

///二进制方式方式序列化

BinaryFormatter ser = new BinaryFormatter();

MemoryStream ms = new MemoryStream();

ser.Serialize(ms, dss);

byte[] buffer = ms.ToArray();

///调用压缩方法

byte[] Zipbuffer = Compress(buffer);

return Zipbuffer;

}

///压缩二进制文件

private byte[] Compress(byte[] data)

{

MemoryStream ms = new MemoryStream();

Stream zipStream = null;

zipStream = new GZipStream(ms, CompressionMode.Compress, true);

///从指定的字节数组中将压缩的字节写入基础流

zipStream.Write(data, 0, data.Length);

zipStream.Close();

ms.Position = 0;

byte[] Compressed_Data = new byte[ms.Length];

ms.Read(Compressed_Data, 0, int.Parse(ms.Length.ToString()));

return Compressed_Data;

}

第三部:解压反序列化

///将压缩后的二进制数组解压

public static byte[] Decompress(byte[] data)

{ ///data参数为压缩后的二进制数组

try

{

MemoryStream ms = new MemoryStream(data);

Stream zipStream = null;

zipStream = new GZipStream(ms, CompressionMode.Decompress);

byte[] dc_data = null;

dc_data = EtractBytesFormStream(zipStream, data.Length);

return dc_data;

///返回解压后的二进制数组

}

catch

{

return null;

}

}

/// 将二进制文件反序列化后转化为DataSet

public DataSet GetDatasetFromByte(byte[] ZipByte)

{

byte[] buffer = UnZipClass.Decompress(ZipByte);

BinaryFormatter ser = new BinaryFormatter();

DataSetSurrogate dss;

dss = (DataSetSurrogate)ser.Deserialize(new MemoryStream(buffer));

DataSet DS = dss.ConvertToDataSet();

return DS;

}

常用WebServices返回数据的4种方法比较

以前经常在群里听到朋友们说WebServices的性能特别的慢,说的如何如何。说实话,WebServices的确比调用本地数据要慢一些,可是究竟有多慢,真的如朋友们说的那么难以忍受吗?我个人感觉,多半原因在处理的方式上。让我们亲自编写测试代码,来证明这一切吧。文章由于是我一段时间的总结篇,因此难免参杂个人主观因素,说的不对的地方,还请多多批评。以下我们主要从调用WebServices的方法的特点、应用场景、测试结果三个方面来进行下说明分析。

  1. 直接返回DataSet对象

    特点:直接返回DataSet对象。

    应用场景:1.内网。2.外网且数据量在kb级别时。

2.返回DataSet对象用Binary序列化后的字节数组

特点:字节数组流的处理模式。

应用场景:较大数据交换。

3.返回DataSetSurrogate对象用Binary 序列化后的字节数组

特点:使用微软提供的开源组件进行序列化,依然是字节流的处理模式。详情请参考:http://support.microsoft.com/kb/829740/zh-cn

应用场景: 较大数据交换。

4.返回DataSetSurrogate对象用Binary 序列化并Zip压缩后的字节数组

 特点:使用微软提供的开源组件对字节流数组进行压缩后传递,依然是字节流的处理模式。详情请参考:http://support.microsoft.com/kb/829740/zh-cn 

 应用场景:外网环境需要进行大数据量网络数据传递时,建议采用此种方法。也是笔者强烈向大家推荐使用的一种方法。

WebServices的代码如下:

WebServices

客户端调用WebServices的代码如下:

客户端调用WebServices

测试的结果按照先后顺序如下图所示:

关于测试结果的特殊说明:由于测试环境是在本地,数据量也不是很大,测试的结果离实际情况还不是很接近,如果大家有条件的话,可以测试一下,同时希望把测试的结果提供给大家参考。

最后,为了方便大家,这里还提供了源码下载,下载地址如下:

/Files/wlb/WebServiceSummary.rar

关于源代码的特殊说明:笔者这里的开发环境为VS2008中文版sp1+SQLServer2008sp1。数据库为Northwind数据库。

http://www.cnblogs.com/wlb/archive/2009/04/13/1434419.html

其他:

http://blog.csdn.net/qiujialongjjj/article/details/20033943

webservice中将dataset 压缩的更多相关文章

  1. WebService使用DataSetSurrogate压缩Dataset的序列化和解压反序列化传输 (转)

    转自:http://blog.163.com/hehong0925@126/blog/static/1339333372012102242920521/ 在WebService中将dataset序列化 ...

  2. Ajax调用WebService

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1 ...

  3. JQuery请求WebService返回数据的几种处理方式

    打开自己的博客仔细浏览了一番,发现已经好久没有写博客了,由于最近一直比较忙碌懈怠了好多.默默反省三分钟.......言归正传,现在就对最近在学习webservice的过程中遇到的几种类型的问题中我的理 ...

  4. C# 使用GZip对字符串压缩和解压

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  5. Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示

    Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示 在 开发中遇到应用c#及asp.net的在的webservice 保存图片并以xml文件形式现实出来 ...

  6. 关于C#调用WebServices的方法

    2018-1-22 前情是我使用vs在引用高通的webservice时出现了下载错误导致无法引用这个服务,先是在网上查询了这个错误的问题及解决方案,将这个问题与解决方法发给了高通同事,可惜的是他也不清 ...

  7. delphi中midas是什么

    Delphi中MIDAS到底是什么呢?和他相关组件是什么呢?   MIDAS(Multitiered Distributed Application Services)多层分布式应用服务.   Del ...

  8. DB2和Oracle区别

    转 http://blog.chinaunix.net/uid-7374279-id-2057574.html 写在前面:今天客户来访(日本人),问我DB2和Oracle区别.因为不是DBA(勉强的理 ...

  9. gzip优化网络传输量提高传输效率[转]

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;us ...

随机推荐

  1. jQuery改变CSS使DIV显示

    HTML: <div id="mazey" style="display:none;">www.mazey.net</div> jQue ...

  2. Python2 和 Python3 区别汇总

    [Python2 和 Python3 的区别汇总,不定期补充] print 在进行程序调试时用得最多的语句可能就是 print,在 Python 2 中,print 是一条语句,而 Python3 中 ...

  3. 内置函数: zip 用法

    描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符 ...

  4. Linux Centos使用脚本安装Docker

    1.使用sudo或root权限登录Centos. 2.确保yum包更新到最新. sudo yum update 3.执行Docker安装脚本 # 执行这个脚本会添加docker.repo源并安装Doc ...

  5. Linux中权限管理之文件属性权限

    chattr [+-=][选项] 文件或目录名 + 增加权限 - 删除权限 = 等于某权限 选项: i 文件设置i属性,不允许对文件进行删除.改名.添加.修改数据,相当于把整个文件锁起来了 目录设置i ...

  6. Python 获取文件路径及文件目录

    import os print (os.path.dirname(__file__)) print (os.path.abspath(__file__)) print (os.path.abspath ...

  7. 使用Kotlin开发Android应用(III):扩展函数和默认值

    通过前面两篇文章,我们学习了Kotlin的基本知识,并知道如何配置工程,本文将接着介绍Java没有的而Kotlin实现了的有趣的特性.记住当你对Kotlin语言有任何疑问时,请参考官方指南.该指南组织 ...

  8. C# 函数3

    //获取部分     public class GF_GET     {         /// <summary>         /// 根据坐标点获取屏幕图像         /// ...

  9. Maven- 使用Maven构建一个可执行jar

    How to Create an Executable JAR with Maven 1.最重要的是使用jar类型,<packaging>jar</packaging>.当然不 ...

  10. 构建Ruby开发环境(Windows+Eclipse+Aptana Plugin)

    1.安装Ruby ①.从http://rubyinstaller.org/downloads/下载安装包:rubyinstaller-2.2.5-x64.exe,直接安装.(so easy) 2.安装 ...