Я возвращаю поток из службы WCF и пытаюсь преобразовать его в MemoryStream. Но в веб-приложении, где в потреблении службы WCF, я получаю результат от «MessageBodyStream», где ожидал «System.IO» .Поток". Как я могу преобразовать это в MemoryStream?C# Как преобразовать MessageBodyStream в MemoryStream?
ответ
Message.BodyStream
имеет тип Stream
.
Вам нужно будет прочитать весь поток в вашем MemoryStream
, чтобы его преобразовать.
Я не знаю, действительно ли это то, что вы действительно хотите, но вы можете просто присвоить значение переменной MemoryStream
, singe MemoryStream
наследует от Stream
.
Иногда потоки приходят и вы не знаете, насколько они являются, для этого использовать этот код:
public static byte[] ReadToEnd(System.IO.Stream stream)
{
long originalPosition = stream.Position;
byte[] readBuffer = new byte[4096];
int totalBytesRead = 0;
int bytesRead;
while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
{
totalBytesRead += bytesRead;
if (totalBytesRead == readBuffer.Length)
{
int nextByte = stream.ReadByte();
if (nextByte != -1)
{
byte[] temp = new byte[readBuffer.Length * 2];
Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
readBuffer = temp;
totalBytesRead++;
}
}
}
byte[] buffer = readBuffer;
if (readBuffer.Length != totalBytesRead)
{
buffer = new byte[totalBytesRead];
Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
}
return buffer;
}
Затем, если у вас есть массив вы можете преобразовать его в поток памяти ...
byte[] myBytes = ReadToEnd(theStream);
Stream theMemStream = new MemoryStream(myBytes, 0, myBytes.Length);
для преобразования MessageBodyStream в MemoryStream, выполните следующие действия:
MemoryStream stream = new MemoryStream();
messageStream.CopyTo(stream); // Assuming messageStream is your MessageBodyStream
stream.Position = 0; // Be sure to set the position to 0 before using it.
И вы сделали !!
Надеюсь, это поможет.
Похоже, что буфер в примере кода удваивается по размеру каждый раз, когда он удлиняется во внутреннем цикле. Таким образом, вместо
byte[] temp = new byte[readBuffer.Length * 2]
не было бы лучше добавить вместо умножения, например.
byte[] temp = new byte[readBuffer.Length + 4096]
В идеале мы можем использовать переменную вместо жестко закодированного значения здесь, но я надеюсь, что это передает точку.
- 1. Как преобразовать поток в MemoryStream
- 2. Как преобразовать MemoryStream в FileStream?
- 3. Преобразовать родной буфер MemoryStream
- 4. ищет MemoryStream в C++
- 5. Преобразование MemoryStream в FileStream с C#?
- 6. Нужно MemoryStream C# в IOS
- 7. преобразование массива MemoryStream в fileStream C#
- 8. MemoryStream в SByte []
- 9. MemoryStream к DataTable в C#
- 10. C# Как изображение хранится в MemoryStream
- 11. Сборка нагрузки XML документ из MemoryStream C#
- 12. Как преобразовать ppt в HTML в C#?
- 13. После fileStream.CopyTo (memoryStream), memoryStream имеет значение null
- 14. C# на Java: Base64String, MemoryStream, GZipStream
- 15. MemoryStream «out of memory» C#
- 16. Преобразование BitmapSource в MemoryStream
- 17. C# BitmapImage AccessViolationException при сохранении как MemoryStream
- 18. C# Как использовать MemoryStream с многопоточной
- 19. C# смыва StreamWriter и MemoryStream
- 20. C# MemoryStream замедляет выполнение программы
- 21. C# WPF UI замораживания после использования MemoryStream
- 22. C# Как преобразовать pictureBox.Image в байт-массив?
- 23. Располагая MemoryStream в Kinesis (KCL) C#
- 24. Analog MemoryStream в Python
- 25. Читайте с огромного MemoryStream в C#
- 26. C#: Как преобразовать многостраничный TIFF через MemoryStream в одно длинное изображение?
- 27. Как преобразовать видео в байтовый массив в C# (c sharp)?
- 28. C# MemoryStream в текстовый файл не завершается
- 29. Преобразовать строку IInputStream в C#
- 30. Преобразовать MemoryStream в байты [] - Невозможно получить доступ к закрытому Стрит