Получение основного потока от потокового веб-сервиса wcf - PullRequest
1 голос
/ 09 марта 2011

Я создаю потоковый веб-сервис в WCF, и у меня возникла проблема с получением доступа к базовому потоку.

Я реализую существующий контракт, основанный на wsdl, но я хотел бы обеспечить потоковую передачу службы. Поскольку я не могу изменить контракт, я не могу использовать Stream в качестве параметра (поскольку это меняет контракт).

Итак, я остановился на использовании сообщения в качестве параметра и возврата. Это работает безупречно.

Но я бы хотел иметь доступ к объекту Stream (который должен находиться где-то внутри объекта Message или его свойств). Но единственное, что дает мне Сообщение, это XmlDictionaryReader, и это не разрешает доступ к Потоку.

public Message GetMessage(Message message)
    {
        // We need some way to access the underlying stream from the message - the GetReaderAtBodyContents is not usable
        XmlDictionaryReader reader = message.GetReaderAtBodyContents();
        CopyReaderToFile(reader);
        return Message.CreateMessage(MessageVersion.Soap11, "http://tempuri.org/IStreamingService/GetMessageResponse", "Hej med dig fra GetMessage. MessageLength ");
    }

Выше показана реализация моего сервиса. Основная проблема с XmlDictionaryReader заключается в том, что он не дает мне доступа к точным данным, отправляемым клиентом - иными словами, я не могу воспроизвести содержимое от клиента в службе. Это плохо, потому что я не могу проверить подпись, присутствующую в MessageHeaders.

Так есть ли способ доступа к базовому потоку? Может ли это быть достигнуто поведением?

Заранее спасибо

1 Ответ

1 голос
/ 10 марта 2011

Проблема в том, что потоковая передача обеспечивается не самим сообщением, а нижележащим кодировщиком сообщений.Как видно из двух методов абстрактного класса MessageEncoder:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...