2010-03-17 58 views
3

我一直在尋找這個線程:How to handle large file uploads via WCF?問題與WCF流

我需要有一個Web服務在我的供應商,我需要上傳和下載文件到託管。我們正在談論從1Mb到100Mb的視頻,因此是流媒體方式。

我不能得到它的工作,我宣佈一個接口:

[ServiceContract] 
    public interface IFileTransferService 
    { 

     [OperationContract] 
     void UploadFile(Stream stream); 
    } 

所有的罰款,我實現它是這樣的:

public string FileName = "test"; 

     public void UploadFile(Stream stream) 
     { 
      try 
      { 
       FileStream outStream = File.Open(FileName, FileMode.Create, FileAccess.Write); 
       const int bufferLength = 4096; 
       byte[] buffer = new byte[bufferLength]; 
       int count = 0; 
       while((count = stream.Read(buffer, 0, bufferLength)) > 0) 
       { 
        //progress 
        outStream.Write(buffer, 0, count); 
       } 
       outStream.Close(); 
       stream.Close(); 
       //saved 
      } 
      catch(Exception ex) 
      { 
       throw new Exception("error: "+ex.Message); 
      } 
     } 

仍然沒有問題,它發佈到我的網絡服務器在interweb上。到現在爲止還挺好。

現在我對它做一個參考,並會將其一個FileStream,但現在的說法是一個byte [] - 這是爲什麼?我如何得到它流的正確方法?

編輯 我結合這個樣子的:

<bindings> 
     <basicHttpBinding> 
     <binding name="StreamingFileTransferServicesBinding" 
       transferMode="StreamedRequest" 
       maxBufferSize="65536" 
       maxReceivedMessageSize="204003200" /> 
     </basicHttpBinding> 
    </bindings> 

我可以使用它沒有問題,並沒有錯誤 - 比我的輸入參數等已經從流變爲一個byte []

編輯2 解決了!當我在客戶端提供參考時,我有點快。無意中,我做了一個「Web參考」,而不是「服務參考」。這解決了字節[] /流問題

+0

你能不能做一個wsdl?如果是這樣,你可以添加到你的描述。我相信這可能是您綁定中的配置問題。 – 2010-03-17 20:27:03

+0

我認爲,當我可以通過瀏覽器瀏覽並瀏覽它時,我可以生成wsdl? – 2010-03-17 20:30:44

+0

你如何「參考它」?它是一個ServiceReference嗎? – 2010-03-17 20:56:48

回答

2

難道這包括在項目中的服務引用?

我通常有我的流媒體服務,稍微更復雜的對象,例如,而不是這樣的:

[OperationContract] 
void UploadFile(Stream stream); 

嘗試

[OperationContract] 
void UploadFile(FileDTO stream); 

[MessageContract] 
public class FileDTO : IDisposable 
{ 
    [MessageBodyMember] 
    public Stream FileStream { get; set; } 

    [MessageHeader] 
    public String FileLabel { get; set; } 
} 

服務參考客戶端上的電話應該是這樣的:

client.UploadFile(fileLabel, fileStream); 

參數是String和Stream。

+0

這並沒有改變任何東西,「複合體」對象的流仍的byte []當我的客戶 – 2010-03-17 20:58:25

+0

上IM閱讀我的編輯2,thx一堆,第一次看到你的帖子時忽略了你的第一行:-) – 2010-03-17 21:03:21