Restful WCF服务 - 返回byte []?

时间:2012-01-17 21:37:30

标签: wcf rest

我正在使用RESTful WCF服务。其中一个服务方法返回byte [](包含一个文件)。

在客户端,我有一些代码使用WebRequest类来调用该特定服务方法。使用WebRequest,我得到的响应流如下:

Stream stream = webReq.GetResponse().GetResponseStream();

从这个流中,我然后重建一个byte [],然后在本地输出File。问题是客户端的重建文件与服务端返回的文件不相似(我得到的损坏的PDF文件大小比从服务端发送的文件大得多)。就在服务方法返回byte []之前,我将那个byte []输出到服务端的磁盘上并且它创建了文件很好...这表明返回byte []的方法和我的客户端之间出错了从客户端的Stream重构byte [] ...从Stream重建byte [],我使用的是以前在stackoverflow上发布的方法:

public static byte[] ReadFully(Stream input) 
{     
    byte[] buffer = new byte[16*1024];     
    using (MemoryStream ms = new MemoryStream())     
    {         
        int read;         
        while ((read = input.Read(buffer, 0, buffer.Length)) > 0)         
        {
            ms.Write(buffer, 0, read);         
        }         
        return ms.ToArray();     
     } 
}

任何可能出错的想法?​​

1 个答案:

答案 0 :(得分:1)

我猜这个服务器的响应除了原始字节外还包含一些信封。像XML信封或其他东西。当然,假设在响应中字节是base64编码的字符串,因为您无法将二进制数据存储到XML中。它还可以解释为什么在客户端上获得比服务器发送的实际PDF更大的缓冲区。

这当然取决于您的WCF服务使用什么绑定以及如何配置。当您转储MemoryStream的内容时,您正在客户端上阅读,您看到了什么?这应该为您提供有关如何在HTTP响应正文中编码实际PDF文件的进一步提示。