2010-10-22 19 views
1

我有一個Windows Mobile應用程序,通過WCF發送數據到服務器。是否流WCF肥皂幫助客戶端使用較少的內存發送?

它發送的數據有時會超出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都放在內存中對於客戶端來說太多了。

將流式傳輸允許我發送數據通過電線分段?還是我仍然需要在客戶端緩衝所有數據,而數據流只能幫助接收大量數據?

回答

1

據我所知,如果你的方法接受一個MainContract你需要在客戶端完全存儲在內存中,以便將序列化結果流式傳輸到WCF主機。

如果加載了一個完整的MainContract將在客戶端太多的記憶,我會調整服務讓這樣的事情:

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

,然後修改調用代碼pseduo流的數據發送到WCF主機,通過循環調用上述操作。 (顯然,你需要改變它的更新/刪除情況等)。