#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
.