Я создаю потоковый веб-сервис в 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.
Так есть ли способ доступа к базовому потоку? Может ли это быть достигнуто поведением?
Заранее спасибо