WebService传输DataSet的
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端,压缩与不压缩变得透明了,两方面的程序员都不用再关心这个问题了。而且我觉得“双代理”还可以为我们处理其他很多的问题,比如排队,异 步操作,权限等等。那位朋友||大拿||高人有兴趣探讨这个问题的,小可甚喜! ?(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |