3

我正在开发一种 Silverlight 报告工具,该工具可以根据客户数据绘制各种精美的图表。我现在遇到的问题是将我需要的所有数据从数据库中获取到我的 silverlight 应用程序的好方法。

到目前为止,我有一个 Web 服务,它将我的数据分成 1000 个组并将它们发送回给我。我需要超过 3000 条记录,这需要以 2 秒的时间对 Web 服务进行大约 4 次调用。不用说,它比我想要的要慢。

我目前有这些设置:


binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;

我确信有人有更好的方法来更快地获取数据库数据。至少,一种可以让我一次尝试获取所有数据的方法。

4

1 回答 1

1

它(部分基于前面的问题)听起来像带宽是问题;我会认真考虑尝试 protobuf-net;Google 设计的“protocol buffers”格式非常有效(默认的要高得多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
}

和 a List<MyRecord>,那么您应该可以使用:

byte[] result;
using(MemoryStream ms = new MemoryStream()) {
    Serializer.Serialize(ms, list); // or maybe (list, ms) ;-p
    result = ms.ToArray();
}

我还看到有人Stream在操作合同上返回 a (而不是 a byte[])——这似乎与 MTOM 一起工作得更好(提示:在传递原始二进制文件时,如果可能的话,您肯定希望启用 MTOM)。

于 2009-09-22T21:06:42.493 回答