Невозможно преобразовать объект типа ‘MessageBodyStream’ в тип ‘System.IO.MemoryStream’

#c# #wcf

#c# #wcf

Вопрос:

Я возвращаю memorystream в виде потока с моего сервера wcf. Когда я извлекаю это в клиенте и возвращаю обратно в MemoryStream, я получаю эту ошибку.

Я не понимаю, откуда взялся MessageBodyStream, поскольку я никогда им не пользовался.Кто-нибудь, пожалуйста, может подсказать мне решение этой проблемы?

Спасибо.

Комментарии:

1. Ошибка заключается в том, что «Невозможно преобразовать объект типа ‘MessageBodyStream’ в тип ‘System.IO.MemoryStream'». Это ошибка на клиенте.

Ответ №1:

Почему бы не использовать его как Stream вместо MemoryStream ?

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

Например, если вы отправляете MemoryStream, получатель получит его от имени Системы.ServiceModel.Диспетчер.Форматирование потока.Класс MessageBodyStream (любой отправляемый вами поток принимается как этот).

http://christopherdeweese.com/blog2/post/streaming-in-wcf-knowing-is-half-the-battle

Вот некоторая информация MSDN по теме:http://msdn.microsoft.com/en-us/library/ms733742.aspx

Комментарии:

1. @Джош, рад, что это помогло. Но почему вы не приняли это как ответ в таком случае? zespri опубликовал ответ 14 минут спустя по той же ссылке, которую я уже опубликовал…

Ответ №2:

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

Комментарии:

1. Спасибо, я только что нашел тот же пост на форуме в Google и обновил страницу здесь, чтобы увидеть ваш ответ с той же ссылкой 🙂

Ответ №3:

MessageBodyStream и MemoryStream являются несвязанными типами, вы не можете преобразовать один в другой. Вероятно, вам следует просто использовать возвращаемый объект как Stream .