3

私は、クライアント データに基づいてあらゆる種類の派手なグラフを作成する Silverlight レポート ツールに取り組んでいます。私が今抱えている問題は、必要なすべてのデータをデータベースから Silverlight アプリに取得する良い方法です。

私は、データを 1000 個のグループに分割して返送する Web サービスを利用しています。3000 を少し超えるレコードが必要です。これは、Web サービスを 2 秒ごとに約 4 回呼び出す必要があります。言うまでもなく、私が望むよりも遅いです。

私は現在これらのセットを持っています:


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

誰かがより高速なデータベースデータを取得するためのより良い方法を持っていると確信しています。少なくとも、1 回の試行ですべてのデータを取得できる方法です。

4

1 に答える 1

1

(一部は以前の質問に基づいて)帯域幅が問題のようです。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
}

と a 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 を有効にする必要があります)。

于 2009-09-22T21:06:42.493 に答える