2009-10-05 100 views
3

我有下面的代码流发送(文件)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; 
     } 
    } 

我希望能够得到在客户端发送流的长度,但流类不支持这一点。

这样做的最好方法是什么?

感谢, 托尼

回答

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应该工作,因为你总是可以在没有真正读取文件的情况下获得文件的长度)。

+0

所以从我的理解,你只需改变通过SOAP消息发送的消息并将其添加到消息的头部。我懂了。谢谢!我可以使用这个。 – 2009-10-05 18:28:59