Помогает ли потоковое вещание мыла WCF отправлять клиенту меньше памяти? - PullRequest
1 голос
/ 22 октября 2010

У меня есть приложение для Windows Mobile, которое отправляет данные через WCF на сервер.

Отправляемые данные иногда превышают лимит на устройстве Windows Mobile. Мне интересно, не поможет ли потоковая передача хранить все данные, которые я должен отправить в память сразу.

Вот простой пример:

[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 Ответ

1 голос
/ 23 октября 2010

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

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

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

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

...