2009-10-05 68 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