2010-10-22 1 views
1

У меня есть приложение для Windows, которое отправляет данные через 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; } 
} 

Скажем, у меня есть только один MainContract объект. Но в нем много объектов SubContract. (Мой реальный сценарий более сложен).

Сдерживание всего MainContract в памяти слишком много для клиентской стороны.

Потоковая передача позволит мне отправлять данные по проводам на куски? Или мне все еще нужно буферизировать все это на стороне клиента, и потоковая передача просто помогает при получении больших данных?

ответ

1

Насколько я знаю, если ваш метод принимает MainContract, вам необходимо иметь это полностью в памяти на стороне клиента, чтобы передать сериализованный результат хосту WCF.

При загрузке до полного MainContract займет слишком много памяти на стороне клиента, я бы настроить услугу, чтобы что-то вроде этого:

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

, а затем изменить код вызова в pseduo-потоке данных для хоста WCF, путем вызова вышеуказанных операций в цикле. (Очевидно, вам нужно будет изменить его для ситуаций обновления/удаления и т. Д.).