2011-09-22 68 views
16

我打算通過WCF Streaming傳遞MemoryStream,但它似乎無法正常工作,但是當我稍微更改代碼以傳遞FileStream時,它正在工作。實際上,我的目的是通過大量的業務對象集合(可序列化)。我正在使用basicHttpBinding。您的建議將非常感謝!如何通過WCF流​​傳輸MemoryStream

編輯: 問題的症狀是傳入流爲空。既沒有錯誤也沒有例外。

+0

如果它的失敗,一個異常必須被拋出。你能在哪裏抓到它?錯誤信息是什麼?信息是否給你提供瞭解發生的事情的線索? –

+0

非常感謝您的回覆。我突然發佈了這個問題,因爲它讓我絕望了好幾天。 –

回答

51

你沒有提供很多細節,但是,我幾乎可以肯定我知道這個問題是什麼,因爲我已經看到發生了很多事情。

如果您爲MemoryStream編寫了一些內容以便作爲WCF服務操作的結果返回該內容,則需要在返回之前手動重置該流到其開頭。 WCF將只讀取當前的位置的數據流,因此如果該位置未被重置,將會返回一個空的數據流。

這至少可以解釋你描述的問題。希望這可以幫助。

這裏是一些示例代碼:

[OperationContract] 
    public Stream GetSomeData() 
    { 
     var stream = new MemoryStream(); 
     using(var file = File.OpenRead("path")) 
     { 
      // write something to the stream: 
      file.CopyTo(stream);   
      // here, the MemoryStream is positioned at its end 
     } 
     // This is the crucial part: 
     stream.Position = 0L; 
     return stream; 
    } 
+4

非常感謝..你真的保存了一天.. –