Доступ к данным Silverlight - PullRequest
       27

Доступ к данным Silverlight

3 голосов
/ 23 сентября 2009

Я работаю над инструментом отчетности silverlight, который на основе клиентских данных составляет все виды модных графиков. Проблема, с которой я столкнулся сейчас, - это хороший способ перенести все необходимые мне данные из базы данных в мое приложение silverlight.

Софар У меня есть веб-сервис, который разбивает мои данные на группы по 1000 и отправляет их мне. Мне нужно чуть более 3000 записей, что требует около 4 звонков в веб-сервис по 2 секунды за штуку. Излишне говорить, что это медленнее, чем хотелось бы.

В настоящее время у меня есть эти наборы:

<code>
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;

Я уверен, что у кого-то есть лучший способ быстрее получить данные из БД. По крайней мере, способ, который позволил бы мне получить все мои данные за одну попытку.

1 Ответ

1 голос
/ 23 сентября 2009

Это (частично основываясь на предыдущем вопросе ) звучит так, как будто проблема с пропускной способностью; Я бы серьезно подумал о том, чтобы попробовать protobuf-net; Формат «буфера протокола», разработанный Google, очень эффективен ( намного больше, чем по умолчанию 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, если это возможно при передаче необработанного двоичного файла ).

...