Restful WCF Service - возвращающий байт []? - PullRequest
1 голос
/ 18 января 2012

Я работаю с сервисом RESTful WCF. Один из методов сервиса возвращает byte [] (который содержит файл).

На стороне клиента у меня есть некоторый код, который использует класс WebRequest для вызова этого конкретного метода службы. Используя WebRequest, я получаю поток ответов вроде:

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

Из этого потока я затем восстанавливаю байт [] и затем выводю файл локально. Проблема в том, что восстановленный файл на стороне клиента не похож на файл, который был возвращен со стороны службы (я получаю поврежденный PDF-файл, размер которого намного больше, чем файл, отправленный со стороны службы). Непосредственно перед тем, как метод service возвращает byte [], я вывел этот byte [] на диск на стороне службы, и он создал файл нормально ... Это указывает на что-то не так между этим методом, возвращающим 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 Ответ

1 голос
/ 18 января 2012

Я предполагаю, что ответ от сервера содержит некоторый конверт в дополнение к необработанным байтам. Как конверт XML или что-то. Что, конечно, предполагает, что байты - это закодированная строка base64 в ответе, потому что вы не можете хранить двоичные данные в XML. Это также объясняет, почему вы получаете больший буфер на клиенте, чем фактический PDF, отправленный сервером.

Это, конечно, будет зависеть от того, какую привязку использует ваша служба WCF и как она настроена. Когда вы выгружаете содержимое MemoryStream, которое вы читаете на клиенте, что именно вы видите? Это должно дать вам дополнительные советы о том, как фактический файл PDF кодируется в теле ответа HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...