【问题标题】:Silverlight data accessSilverlight 数据访问
【发布时间】:2010-11-30 13:15:13
【问题描述】:

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

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

我目前有这些:


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

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

【问题讨论】:

    标签: silverlight data-access


    【解决方案1】:

    它(部分基于earlier question)听起来带宽是问题;我会认真考虑尝试 protobuf-net; Google 设计的“协议缓冲区”格式非常高效(much 比默认的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 )。

    【讨论】:

    • 问题将出现在 silverlight 方面。现在我不相信有一种简单的方法可以检索序列化信息。 BinarySerializer 不是 silverlight 框架的一部分。
    • 从外观上看,传输延迟也不算太差。该应用程序将在数据库附近运行。诀窍是找到一种方法来一口气获取所有数据,而不是必须返回 4 次,这会导致我的 8 秒延迟。
    • 这就是为什么我没有提到BinaryFormatter;我提到了一个替代的(并且更有效的)二进制序列化程序,它确实在常规和 Silverlight 中都可以工作。 code.google.com/p/protobuf-net
    • 如果延迟低,4 次调用是微不足道的;对我来说这听起来更像是带宽......?
    猜你喜欢
    • 2011-04-05
    • 2010-10-14
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2012-03-18
    相关资源
    最近更新 更多