Silverlight数据访问[英] Silverlight data access

本文是小编为大家收集整理的关于Silverlight数据访问的处理方法,想解了Silverlight数据访问的问题怎么解决?Silverlight数据访问问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

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

我目前有这些设置:

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

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

推荐答案

它(部分基于早期问题)听起来带宽是个问题;我会认真考虑尝试 protobuf-net;Google 设计的"protocol buffers"格式非常高效(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).

本文地址:https://www.itbaoku.cn/post/1793950.html