Длина потока WCF - PullRequest
       5

Длина потока WCF

3 голосов
/ 05 октября 2009

У меня есть следующий код для отправки потока (файла) клиенту wcf:

 public Stream Download( string path )
    {

        try
        {
            FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);

            return stream;

        }
        catch (Exception ex)
        {
            string error = ex.Message;

            return null;
        }
    }

Я хочу иметь возможность получить длину отправляемого потока на стороне клиента, но класс Stream не поддерживает это.

Как лучше всего это сделать?

Спасибо, Tony

1 Ответ

4 голосов
/ 05 октября 2009
[MessageContract]
public class SizedStreamMessage
{
   [MessageHeader]
   public long streamSize;

   [MessageBody] //Has to be just one MessageBody for streaming to work!
   public Stream theStream;
}

А потом:

[OperationContract]
public SizedStreamMessage Download(string path)
{
 //Fill in streamSize...
 //Fill in theStream...
}

Очевидно, это будет работать только для потоков, для которых вы можете получить размер на стороне сервера без буферизации всего потока (FileStream должен работать, потому что вы всегда можете получить длину файла без фактического чтения файла).

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