[英]Silverlight data access
我正在开发一个silverlight报告工具,它根据客户数据绘制各种奇特的图形。 我现在遇到的问题是将我需要的所有数据从数据库获取到我的silverlight应用程序的好方法。
Sofar我有一个Web服务,将我的数据分成1000个组并将它们发回给我。 我需要超过3000条记录,这需要大约4次调用Web服务,每秒2秒。 不用说,它比我想要的慢。
我目前有这些设置:
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;
我确信有人有更好的方法来获取更快的数据库数据。 至少,这种方式可以让我一次性获取所有数据。
它(部分基于前面的问题 )听起来像带宽是问题; 我会认真考虑尝试protobuf-net; 该“协议缓冲区”格式由谷歌设计是非常有效的( 更使默认DataContractSerializer
),它可以非常方便地从.NET使用。 适用于与带宽相关的场景。 唯一的问题是目前WCF挂钩不能与Silverlight一起使用(所以你不能只添加一个属性/配置条目),但你可以很容易地将数据作为byte[]
传递(只需返回byte[]
一个方法)。
例如; 如果你有一个像这样的记录:
[ProtoContract]
public class MyRecord {
[ProtoMember(1)]
public int Id {get;set;}
[ProtoMember(2)]
public string Description {get;set;}
// etc
}
和List<MyRecord>
,那么你应该可以使用:
byte[] result;
using(MemoryStream ms = new MemoryStream()) {
Serializer.Serialize(ms, list); // or maybe (list, ms) ;-p
result = ms.ToArray();
}
我也看到有人在操作合约上返回一个Stream
(而不是byte[]
) - 这似乎与MTOM一起工作得更好(提示:如果可能的话,你在传递原始二进制文件时肯定想启用MTOM)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.