Разделение / потоковая передача WCF - сделайте его прозрачным для клиента

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

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

SaveData(DataInformation info)

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

SaveDataChunk(byte[] buffer)

Можно ли сделать это как-то прозрачным для клиента, просто вызвав «SaveData»?

РЕДАКТИРОВАТЬ: Небольшой дополнительный вопрос, хотя он может перейти к отдельному вопросу. Если мы используем потоковую передачу wcf, тогда все ServiceOperations в ServiceContract ДОЛЖНЫ выполнять дополнительные ограничения, такие как `` Операции, которые происходят через потоковый транспорт, могут иметь контракт не более чем с одним входным или выходным параметром '' ?

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

Спасибо


person bybor    schedule 23.04.2010    source источник


Ответы (1)


Разделение на части или потоковая передача прозрачны для кода, установленного в файле конфигурации.

Если вы используете объекты передачи данных для ввода и вывода, как и ваш объект DataInformation, у вас будет только один параметр.

Ваш byte [] может быть свойством в DTO.

person Shiraz Bhaiji    schedule 23.04.2010
comment
Пример кода мог бы быть отличным. Все, что я нашел, использует Stream в качестве параметра контракта операции. Как здесь csharp-codesamples.com/2009/02/ Абзац Контракт на обслуживание и класс DataUploader - person bybor; 29.04.2010