WCF流长度

时间:2009-10-05 17:45:26

标签: c# wcf

我有以下代码将(文件)流发送到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类不支持此功能。

最好的方法是什么?

谢谢, 贝

1 个答案:

答案 0 :(得分:4)

[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应该工作'因为你总是可以获得文件的长度而不实际读取文件)。