Исключение WCF при получении длины потока - PullRequest
0 голосов
/ 30 августа 2010

У меня есть веб-сервис WCF, который возвращает поток.На стороне клиента, когда я пытаюсь прочитать его, используя приведенный ниже код, я получаю исключение в строке "Byte [] buffer = new Byte [outputMessage.FileByteStream.Length];"поговорка System.Notsupported.Пожалуйста, сообщите мне, что я делаю здесь не так.

        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 Ответ

3 голосов
/ 30 августа 2010

Поток, из которого вы читаете, не поддерживает получение длины потока (скорее всего, потому что длина не будет известна, пока весь файл не будет загружен).Чтение потока чанками - подобно тому, как работает цикл while, но с буфером фиксированного размера - как только вы получите 0, возвращенное для byteRead, вы узнаете, что достигли конца потока.

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