WebService传输DataSet的
来源:互联网 发布:mysql主从复制ssl 编辑:程序博客网 时间:2024/05/03 08:56
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
using System.Data;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
/// <summary>
/// 压缩数据集
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public static byte[] CompressDS(DataSet ds)
{
MemoryStream ms = new MemoryStream();
ZipOutputStream zos = new ZipOutputStream(ms);
zos.PutNextEntry(new ZipEntry(ds.DataSetName));
BinaryFormatter bf = new BinaryFormatter();
DataSetSurrogate dss = new DataSetSurrogate(ds);
bf.Serialize(zos, dss);
zos.CloseEntry();
zos.Close();
byte[] ret = ms.ToArray();
ms.Close();
return ret;
}
/// <summary>
/// 解压数据集
/// </summary>
/// <param name="byt"></param>
/// <returns></returns>
public static DataSet DecompressDS(byte[] byt)
{
MemoryStream ms = new MemoryStream(byt);
BinaryFormatter bf = new BinaryFormatter();
ZipInputStream zis = new ZipInputStream(ms);
zis.GetNextEntry();
DataSetSurrogate dss = (DataSetSurrogate)bf.Deserialize(zis);
zis.Close();
ms.Close();
DataSet ds = dss.ConvertToDataSet();
return ds;
}
基于SharpZipLib实现上面两个函数后,DS压缩的任务就完成了。BTW,VS2005里边,.NET FW 自带了CompressStream,我们可以跟SharpZipLib说再见了:)
至于WS怎么传输,在Paain上看到Tomgus (小桥流水) 老兄转载的http://www.cnblogs.com/flyskywlh/archive/2005/08/18/217382.html,乃Flyskywlh老兄的大作。
首先我也很同意使用byte[]数组传输,非常方便。至于具体WebMethod的方式,我在实际应用中是大量使用实体WebMthod的,比如:
[WebMethod]
public DataSet GetOrders() {}; //获取所有订单
[WebMethod]
public DataSet UpdateOrders(DataSet dsOrders){}; //更新指定订单
因为采取这种模式,所以系统里边有极多的WebMethod(WinformUI仅通过WS交互),一个标准WM的调用流程是:
客户端压缩WM中所有DS型的参数-〉调用WM-〉服务器端解压所有DS型的参数-〉执行实际WM-〉对DS型的返回值进行压缩-〉客户端接收并解压得出结果DS
上 述流程的具体实现很麻烦,在客户端用了AOP的透明代理的概念;服务器端则用了动态调用WS的技术。实现这种“双代理”的模式后,对于WS端或 Winform端,压缩与不压缩变得透明了,两方面的程序员都不用再关心这个问题了。而且我觉得“双代理”还可以为我们处理其他很多的问题,比如排队,异 步操作,权限等等。那位朋友||大拿||高人有兴趣探讨这个问题的,小可甚喜!
- WebService传输DataSet的
- WebService传输DataSet的最佳实践
- Webservice之Dataset传输[服务端]
- Webservice之Dataset传输[客户端]
- WebService传输DataSet的一点想法和实践
- WebService传输DataSet的一点想法和实践
- WebService传输DataSet的一点想法和实践
- WebService传输DataSet的一点想法和实践
- WebService传输DataSet的一点想法和实践
- WebService传输DataSet的一点想法和实践
- WebService传输DataSet的一点想法和实践
- Webservice之Dataset传输[效果]
- WebService使用DataSetSurrogate压缩Dataset的序列化和解压反序列化传输
- WebService使用DataSetSurrogate压缩Dataset的序列化和解压反序列化传输
- webservice 基于对象的传输
- WebService返回DataSet/DataTable的争议
- webservice用于大数据量传输的处理
- WebService下实现大数据量的传输
- ASP.NET编程中的十大技巧
- 44B0X的LCD 控制器资料
- ASP.NET 缓存:方法和最佳实践
- ADO.NET 命名规则参考
- sam
- WebService传输DataSet的
- Finger协议源代码阅读笔记
- 转载: BitTorrent Trackerless DHT协议规范V1.0试行草案
- 南山滑雪小记
- 电脑不能正常关机
- 数据库设备与存储空间管理
- Java Collection框架在Collection的生命周期中需要基于不变字段的equals()和hashCode()方法
- 还是开始写吧
- 初次见面