1

WCF 経由でサーバーにデータを送信する Windows モバイル アプリケーションがあります。

送信するデータが、Windows モバイル デバイスの制限を超える場合があります。一度に送信する必要があるすべてのデータをメモリに保持する必要がないようにストリーミングが役立つかどうか疑問に思っています。

簡単な例を次に示します。

[DataContract]
public class MainContract
{
    [DataMember]
    public Guid  ID { get; set; }

    [DataMember]
    public List<SubContract> SubContract { get; set; }
}

[DataContract]
public class SubContract
{
    [DataMember]
    public Guid ID { get; set; }

    [DataMember]
    public string ImageCaption { get; set; }

    [DataMember]
    public Byte[] ImageAsBytes { get; set; }
}

オブジェクトが 1 つしかないとしMainContractます。しかし、その中にはたくさんのSubContractオブジェクトがあります。(私の実際のシナリオはもっと複雑です)。

すべてをMainContractメモリに保持することは、クライアント側で行うには多すぎます。

ストリーミングを使用すると、ネットワーク経由でデータを分割して送信できますか? それとも、クライアント側ですべてをバッファリングする必要があり、ストリーミングは大きなデータの受信に役立つだけですか?

4

1 に答える 1

1

私の知る限り、メソッドが a を受け入れる場合MainContract、シリアル化された結果を WCF ホストにストリーミングするには、クライアント側のメモリに完全に保持する必要があります。

完全にロードするMainContractとクライアント側でメモリが大量に消費される場合は、サービスを調整して、次のようなことができるようにします。

public Guid CreateMainContract(MainContract obj); // return unique id
public Guid CreateSubContract(Guid mainContractToAddTo, SubContract obj);

次に、呼び出しコードを変更して、上記の操作をループで呼び出すことにより、データを WCF ホストに疑似ストリーミングします。(明らかに、更新/削除の状況などに合わせて変更する必要があります)。

于 2010-10-22T20:49:48.500 に答える