2010-08-30 62 views
0

我有一個返回流的WCF Web服務。在客戶端,當我嘗試閱讀它使用下面的代碼,然後我得到一個異常在線「字節[]緩衝區=新的字節[outputMessage.FileByteStream.Length];」說System.Notsupported。請告訴我我在這裏做錯了什麼。獲取流長度時發生WCF異常

 FileMetaData metaData = new FileMetaData(); 
     metaData.ProductIDsArray = new string[] { "1", "2" }; 
     metaData.AuthenticationKey = "test"; 
     FileDownloadMessage inputParam = new FileDownloadMessage(metaData); 
     FileTransferServiceClient obj = new FileTransferServiceClient(); 
     FileDownloadReturnMessage outputMessage = obj.DownloadFile(inputParam); 
     Byte[] buffer = new Byte[outputMessage.FileByteStream.Length]; 
     int byteRead = outputMessage.FileByteStream.Read(buffer, 0, buffer.Length); 
     Response.Buffer = false; 

     Response.Buffer = false; 
     Response.ContentType = "application/x-zip"; 
     Response.AppendHeader("content-length", buffer.Length.ToString()); 
     Stream outStream = Response.OutputStream; 


     while (byteRead > 0) 
     { 
      outStream.Write(buffer, 0, buffer.Length); 
      byteRead = outputMessage.FileByteStream.Read(buffer, 0, buffer.Length); 
     } 
     outputMessage.FileByteStream.Close(); 
     outStream.Close(); 
+1

這是很奇怪的代碼。爲什麼當你已經使用while循環來讀取流時? – 2010-08-30 15:23:39

+0

是的,我不會不同意你,因爲我對此很陌生。請你能建議我一個更好的方法來做同樣的事情。 謝謝 – Amit 2010-08-30 15:28:06

回答

3

,你從閱讀不支持獲取流的長度(最有可能的「事業,直到整個文件下載長度不會知道)流。以塊的形式讀取數據流 - 類似於while循環的做法,但有一個固定大小的緩衝區 - 一旦您爲byteRead返回0,您就會知道您已達到數據流的末尾。

+0

感謝您的回覆。我應該給bytearray多大的尺寸?我不知道我將收到的文件的大小可以是10 MB,也可以是500 MB。請指教 – Amit 2010-08-30 15:38:18