Silverlight + WCF 数据压缩

- 压缩、解压缩库源码下载地址:http://download.csdn.net/source/2617990

-使用数据压缩后,7.8M的数据压缩成不到200k字节传输到客户端。

 

------------------------------------------------------------------------------------------

使用 开源的silverlight-zlib库 压缩

(*源代码改编自 http://cellbi.com/Content/UI/Views/BlogItem.aspx?page=722&AspxAutoDetectCookieSupport=1)


1. Cellbi.SvZLib
直接取自 开源的silverlight-zlib库源码。(仅仅转换成了 Silverlight 4库)

2. Cellbi.Lib
重新建了新的库,将 Cellbi.SvZLib 代码复制到新Cellbi.Lib中。(Cellbi.SvZLib 和 Cellbi.Lib 库实际上是同样的代码,只是一个用于 Silverlight客户端,一个用于 WCF服务端)

3. xxx/CompressedSerializerSL.cs 和 xxx.Web 也是一样的代码,用于压缩、解压缩对象,一个用于 Silverlight客户端,一个用于 WCF服务端。

使用例子如下:

// 1. 服务端
// a. IWCFService.cs
// 测试数据类
[DataContract]
public class UserInfo
{
    private string m_ID;
    private string m_UserName;

    public string ID
    {
        get
        {
            return m_ID;
        }
        set
        {
            m_ID = value;
        }
    }
    public string UserName;
    {
        get
        {
            return m_UserName;
        }
        set
        {
            m_UserName = value;
        }
    }
}

[ServiceContract]
public interface IDataService
{
    [OperationContract]
    byte[] ToCompressTest1();

    [OperationContract]
    byte[] ToCompressTest2();
}

// b. WCFService.cs
public byte[] ToCompressTest1()
{
    UserInfo vResult = new UserInfo();
    return CompressedSerializer.Compress<UserInfo>(vResult);
}

public byte[] ToCompressTest2()
{
    List<UserInfo> list = new List<UserInfo>();
    list.Add(...);
    list.Add(...);
    return CompressedSerializer.Compress<List<UserInfo>>(list);
}


// 2. 客户端
DataServiceReference.WCFServiceClient wcfClient = new DataServiceReference.WCFServiceClient();

// 测试 ToCompressTest1
wcfClient.ToCompressTest1Completed += new EventHandler<DataServiceReference.ToCompressTest1CompletedEventArgs>
(
    delegate(object sender, DataServiceReference.ToCompressTest1CompletedEventArgs e)
    {
        byte[] results = (byte[])e.Result;
        DataServiceReference.UserInfo userinfo = CompressedSerializerSL.Decompress<DataServiceReference.UserInfo>(results);
    }
);
wcfClient.ToCompressTest1Async();

// 测试 ToCompressTest2
wcfClient.ToCompressTest2Completed += new EventHandler<DataServiceReference.ToCompressTest2CompletedEventArgs>
(
    delegate(object sender, DataServiceReference.ToCompressTest2CompletedEventArgs e)
    {
        byte[] results = (byte[])e.Result;
        List<UserInfo> list = CompressedSerializerSL.Decompress<List<UserInfo>>(results);
    }
);
wcfClient.ToCompressTest2Async();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值