- 压缩、解压缩库源码下载地址:http://download.youkuaiyun.com/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();