我正在开发一个 silverlight 报告工具,它可以根据客户数据绘制各种精美的图表。我现在遇到的问题是将我需要的所有数据从数据库获取到我的 silverlight 应用程序的好方法。
到目前为止,我有一个 Web 服务,它将我的数据分成 1000 个组,然后将它们发送回给我。我需要 3000 多条记录,这需要对 Web 服务进行大约 4 次调用,每次调用 2 秒。不用说,它比我想要的要慢。
我目前已经设置了这些:
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;
我确信有人有更好的方法来更快地获取数据库数据。至少,这是一种可以让我一次性获取所有数据的方法。
最佳答案
(部分基于 earlier question )听起来带宽是问题所在;我会认真考虑尝试 protobuf-net; Google 设计的“ Protocol Buffer ”格式非常高效(比默认的 DataContractSerializer
高效得多),并且可以在 .NET 中非常方便地使用。非常适合与带宽相关的场景。唯一的问题是,目前 WCF Hook 无法与 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)。
关于Silverlight 数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1462452/