代码之家  ›  专栏  ›  技术社区  ›  Amit

获取流长度时出现WCF异常

wcf
  •  0
  • Amit  · 技术社区  · 14 年前

            FileMetaData metaData = new FileMetaData();
            metaData.ProductIDsArray = new string[] { "1", "2" };
            metaData.AuthenticationKey = "test";
            FileDownloadMessage inputParam = new FileDownloadMessage(metaData);
            FileTransferServiceClient obj = new FileTransferServiceClient();
            FileDownloadReturnMessage outputMessage = obj.DownloadFile(inputParam);
            Byte[] buffer = new Byte[outputMessage.FileByteStream.Length];
            int byteRead = outputMessage.FileByteStream.Read(buffer, 0, buffer.Length);
            Response.Buffer = false;
    
            Response.Buffer = false;
            Response.ContentType = "application/x-zip";
            Response.AppendHeader("content-length", buffer.Length.ToString());
            Stream outStream = Response.OutputStream;
    
    
            while (byteRead > 0)
            {
                outStream.Write(buffer, 0, buffer.Length);
                byteRead = outputMessage.FileByteStream.Read(buffer, 0, buffer.Length);
            }
            outputMessage.FileByteStream.Close();
            outStream.Close();
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Will A    14 年前

    您正在读取的流不支持获取流的长度(很可能是因为在下载整个文件之前,长度是未知的)。以块的形式读取流-类似于 while 循环正在进行,但是有一个固定大小的缓冲区-一旦您为byteRead返回0,您就知道您已经到达了流的末尾。