WEB Service 下实现大数据量的传输

上传人:ji****72 文档编号:37551685 上传时间:2018-04-18 格式:DOC 页数:13 大小:41KB
返回 下载 相关 举报
WEB Service 下实现大数据量的传输_第1页
第1页 / 共13页
WEB Service 下实现大数据量的传输_第2页
第2页 / 共13页
WEB Service 下实现大数据量的传输_第3页
第3页 / 共13页
WEB Service 下实现大数据量的传输_第4页
第4页 / 共13页
WEB Service 下实现大数据量的传输_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《WEB Service 下实现大数据量的传输》由会员分享,可在线阅读,更多相关《WEB Service 下实现大数据量的传输(13页珍藏版)》请在金锄头文库上搜索。

1、WEB Service 下实现大数据量的传输下实现大数据量的传输Vs2005 里面的,查询 12000 条记录,设置 RemotingFormat = SerializationFormat.Binary;再序列化,通过 WebService 传输,客户端接收,再反序列化,确实效果大大的优于直接传送 DataSet,不仅网络传输中如此,即使本机,性能改善也非常明显. 下面分别是 WebService 里面的方法和客户端反序列化取 DataSet 的方法.1. 服务器上面取数据,填充数据集,转换为二进制格式./ / Method for users data query with binaryF

2、ormatter/ / / public byte BinaryUserSelect(ref string err)ClearCommand();m_commandStringBuilder.Append(“SELECT * FROM t_Users ;“);DataSet dsResult = new DataSet();byte bArrayResult = null;try dsResult = SqlHelper.ExecuteDataset(m_currentConnectionString, CommandType.Text, m_commandStringBuilder.ToSt

3、ring();/ 上面都是取数据的,无需关心.二进制压缩数据集是下面一小段dsResult.RemotingFormat = SerializationFormat.Binary;MemoryStream ms = new MemoryStream();IFormatter bf = new BinaryFormatter();bf.Serialize(ms, dsResult);bArrayResult = ms.ToArray();ms.Close();/ catch (Exception ee)err = ee.ToString();return bArrayResult; 2. 通过

4、WebService 把 byte格式的数据发送到客户端,这里就是 WebService 自己的事情了,我们无需关心3.客户端接收到 byte格式的数据,对其进行反序列化,得到数据集,进行客户端操作./ / Get user data with Binary format/ / public DataSet GetBinaryUserData()string err = “;byte bUserData = svc.ByteArrayUserSelect(ref err);if (err != “)MessageBox.Show(err);err = “;return null;/ 反序列化的

5、过程MemoryStream ms = new MemoryStream(bUserData);IFormatter bf = new BinaryFormatter();object obj = bf.Deserialize(ms);DataSet dsResult = (DataSet)obj;/ms.Close();return dsResult;同样一台机器,手工生成 12000 条数据,在本地使用 WebService 分别读取、传输并在客户端显示数据集和 byte格式的数据,前者平均时间 2.3 秒,后者平均时间为 1.7 秒,之间的差别仅在传输过程的格式,还有后者需要的序列化和反

6、序列化的时间.本地 WebService 传输的差别尚且如此,通过网络传输的时间优化自然会更明显.net1.1 下面微软提供的 DataSetSurrogate 开发包下载地址:http:/ DataSetSurrogate 在.net 2.0 里自带在.net1.1 下的实现方式实例如下在这里,有两种方式:可把序列化后的数据用文件形式保存在客户端硬盘;也可用 Byte方式传回客户端,以下是代码。web service 端(文件形式) WebMethod(Description=“循环获取远程 DATASET“)public void SurrogateReadTable(string Tab

7、leName)/把 DataSet 通过 Surrogate Class 序列化成 Binary StreamDataSet ds;ds=SqlHelper.ExecuteDataset(cnn,CommandType.Text,“select * from “+TableName);/实例化 DataSetSurrogate,传取出的 DATASET 到构造函数里sds = new DataSetSurrogate(ds); /实例化二进制流BinaryFormatter bf=new BinaryFormatter();StreamWriter swDat; /写到本地一个文件里swDat

8、 = new StreamWriter(“c:output_surrogate_dataset.dat“);bf.Serialize(swDat.BaseStream, sds);/这里可以知道序列化后的文件的大小long size = swDat.BaseStream.Length;swDat.Close();客户端 private void button1_Click(object sender, System.EventArgs e)label1.Text=DateTime.Now.ToString();button1.Enabled=false;/反序列化 Binary Stream

9、能通过 Surrogate Class 转换成 DataSet/从 WEB SERVICE 上读取方法svs.SurrogateRead(“t_busdocbase“);BinaryFormatter bf=new BinaryFormatter();StreamReader swDat; swDat = new StreamReader(“c:output_surrogate_dataset.dat“);object o=bf.Deserialize(swDat.BaseStream);DataSet ds;sds = (DataSetSurrogate) o;ds = sds.Conver

10、tToDataSet();dataGrid1.DataSource=ds.Tables0;swDat.Close();web service 端(Byte方式)WebMethod(Description=“获取业务资料远程 DATASET“)public byte SurrogateRead1()DataSet ds;ds=SqlHelper.ExecuteDataset(cnn,CommandType.Text,“select * from t_busdocbase“);sds = new DataSetSurrogate(ds); MemoryStream s= new MemoryStr

11、eam();BinaryFormatter bf = new BinaryFormatter();bf.Serialize(s,sds);byte e = s.ToArray();return e; 客户端 private void button3_Click(object sender, System.EventArgs e)label1.Text=DateTime.Now.ToString();button3.Enabled=false;/*反序列化 Binary Stream 能通过 Surrogate Class 转换成 DataSet*/从 WEB SERVICE 上读取方法byte

12、 bb=svs.SurrogateRead1();MemoryStream br=new MemoryStream(bb);BinaryFormatter bf=new BinaryFormatter();object o=bf.Deserialize(br);sds = (DataSetSurrogate) o;ds = sds.ConvertToDataSet(); dataGrid1.DataSource=ds.Tables0;br.Close();我个人觉得用 byte方式会安全些,毕竟不用在客户端产生文件,不用担心数据的安全。在 2.0 中对数据集序列化和反序列化的方法进行了一下简单

13、的封装,使其可以得到重用的效果.见下面的类 DatFormatter.通过 GetBinaryFormatData 方法可以转换数据集为二进制,在服务器端使用,转换数据集格式。发送,客户端接收,得到二进制格式数据,使用RetrieveDataSet 方法,反序列化,得到数据集,进行客户端操作。通过这些简单的操作(序列化和反序列化,将数据压缩),可以使数据集等体积庞大的对象在远程传递中的时间大大减少,并且可以减少网络中断等问题对程序的影响。1using System;2using System.IO;3using System.Data;4using System.Runtime.Seriali

14、zation;5using System.Runtime.Serialization.Formatters.Binary;67namespace Common89 public class DataFormatter10 11 private DataFormatter() 12 / 13 / Serialize the Data of dataSet to binary format14 / 15 / 16 / 17 static public byte GetBinaryFormatData(DataSet dsOriginal)18 19 byte binaryDataResult =

15、null;20 MemoryStream memStream = new MemoryStream();21 IFormatter brFormatter = new BinaryFormatter();22 dsOriginal.RemotingFormat = SerializationFormat.Binary;2324 brFormatter.Serialize(memStream, dsOriginal);25 binaryDataResult = memStream.ToArray();26 memStream.Close();27 memStream.Dispose();28 return binaryDataResult;29 30 / 31 / Retrieve dataSet from data of binary format32 / 33 /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号