Как передать MemoryStream через потоковую передачу WCF - PullRequest
16 голосов
/ 22 сентября 2011

Я планирую передать MemoryStream через потоковую передачу WCF, но кажется, что она не работает, но когда я немного изменяю код для передачи FileStream, он работает. Фактически, моя цель - передать большую коллекцию бизнес-объектов (сериализуемых). Я использую BasicHttpBinding. Ваше предложение будет высоко ценится!

Отредактировано: Симптомы проблемы в том, что входящий поток пуст. Здесь нет ни ошибки, ни исключения.

1 Ответ

53 голосов
/ 22 сентября 2011

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

Если вы что-то напишите в MemoryStream вчтобы вернуть его в результате операции службы WCF, необходимо вручную сбросить поток до его начала, прежде чем возвращать его.WCF будет только читать поток из этой текущей позиции, следовательно, вернет пустой поток, если эта позиция не была сброшена.

Это, по крайней мере, объяснит проблему, которую вы описываете.Надеюсь, это поможет.

Вот пример кода:

    [OperationContract]
    public Stream GetSomeData()
    {
        var stream = new MemoryStream();
        using(var file = File.OpenRead("path"))
        {
            // write something to the stream:
            file.CopyTo(stream);         
            // here, the MemoryStream is positioned at its end
        }
        // This is the crucial part:
        stream.Position = 0L;
        return stream;
    }
...