• C# How to convert MessageBodyStream to MemoryStream?


        通过WCF服务从数据库取文档数据时,返回的是Stream对象,在DevExpress的PDFViewer显示时,用PDFViewer.LoadDocunent(Stream stream);方法时,报无法从MessageBodyStream转为Stream 的错误。

        最后在StackOverFlow上找到了答案

    不能通过转型,只能通过从Stream中读出数据,然后写入到MemoryStream的方法。

      

    I am returning a Stream from a WCF Service and trying to convert it to a MemoryStream.But in the web application where in consume the WCF service,I am getting the result as of "MessageBodyStream" where i was expecting "System.IO.Stream". How can i convert this to a MemoryStream ?

         下面是采纳的回答:

        Sometimes the streams come in and you dont know how big they are, for that use this code:

    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;
    }

    Then once you have the byte array you can convert it to a memory stream...

      byte[] myBytes = ReadToEnd(theStream);
        Stream theMemStream = new MemoryStream(myBytes, 0, myBytes.Length);
    未经作者允许,禁止转载
  • 相关阅读:
    记录Windows下文件操作记录
    线程太多导致socket连接池爆满,进程启动不了
    【转载】windbg 常用命令详解
    比较两个CSV的方法的探索
    【转载】java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider
    [转载]sql server死锁
    moco搭建json api网站用于接口测试
    Httprequest 获取url 常用方法
    test文件伪装
    微信小程序开发历程
  • 原文地址:https://www.cnblogs.com/wangyangang/p/5736716.html
Copyright © 2020-2023  润新知