WCF chunking / streaming - сделать его прозрачным для клиента - PullRequest
1 голос
/ 23 апреля 2010

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

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

SaveData(DataInformation info)

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

SaveDataChunk(byte[] buffer)

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

EDIT: Небольшой дополнительный вопрос, хотя он мог бы перейти к отдельному вопросу. Если мы используем потоковую передачу wcf, тогда все ServiceOperations в ServiceContract ДОЛЖНЫ выполнять дополнительные ограничения, такие как «Операции, которые происходят в поточном транспорте, могут иметь контракт максимум с одним входным или выходным параметром»?

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

Спасибо

1 Ответ

0 голосов
/ 23 апреля 2010

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

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

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

...