我正在从WCF服务返回一个流,并尝试将其转换为MemoryStream。但是在消费WCF服务的Web应用程序中,我得到的结果是“MessageBodyStream”,而我期望的是“System.IO.Stream”。如何将其转换为MemoryStream?
我正在从WCF服务返回一个流,并尝试将其转换为MemoryStream。但是在消费WCF服务的Web应用程序中,我得到的结果是“MessageBodyStream”,而我期望的是“System.IO.Stream”。如何将其转换为MemoryStream?
将 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.
完成了!
希望这有所帮助。
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);
Message.BodyStream
是 Stream
类型。
你需要将整个流读入到你的 MemoryStream
中才能进行转换。
我不知道这是否是你真正想要的,但你可以将值简单地分配给一个 MemoryStream
变量,因为 MemoryStream
继承自 Stream
。
看起来示例代码中的缓冲区每次在内部循环中加长时都会增加一倍大小。因此,不是
byte[] temp = new byte[readBuffer.Length * 2]
加法比乘法更好,例如:
byte[] temp = new byte[readBuffer.Length + 4096]