2011-05-21 100 views
2

我正在爲學校開發一個媒體服務器項目,並且我爲此選擇了WCF方法。不過,我開始懷疑這是否是一個好主意。我可以使用WCF服務上傳和下載嗎?

獲取WCF服務來上傳和下載文件是一件簡單的事情嗎?直截了當,我的意思是不涉及很多黑客或第三方庫。 WCF服務也將預計將音頻和視頻流傳輸到其消費者/客戶端。

我還應該提到有問題的WCF服務是作爲IIS外部的Windows託管服務託管的。

這有點什麼我現在心裏有:

[OperationContract] 
    bool AddFile(byte[] filedata); 
    [OperationContract] 
    bool DeleteFile(int fileid); 
    [OperationContract] 
    byte[] GetFile(int fileid); 
+0

如何啓用流式傳輸:: http://msdn.microsoft.com/en-us/library/ms789010.aspx – 2011-05-21 03:26:43

+0

@Mitch:我要處理之後流式傳輸。現在,我會很感激上傳和下載的任何建議。我發現了幾個解決這個問題的網站,但其中大多數網站對他們的方法有一些限制。例如,一種方法只有在WCF服務作爲IIS或Windows服務管理之外的控制檯應用程序啓動時纔會起作用。 – rafale 2011-05-21 03:32:02

回答

2

定義方法來接受和返回的Stream數據類型,並確保配置您要使用的綁定TransferMode.Streamed。另外請確保你的綁定使用的編碼是明智的。如果您使用Text所有二進制數據將被base64編碼,這將膨脹所有請求/響應的大小。如果您使用MTOM,則像流這樣的大二進制數據將作爲HTTP主體的單獨實體傳輸到SOAP主體之外,作爲純粹的未編碼二進制數據。二進制編碼顯然會提供最優的傳輸,但它不是標準格式,因此與其他非WCF堆棧互操作將不可能。如果你是純粹的WCF,你無法打敗二進制消息編碼的性能,所以我強烈推薦它,或者如果你需要互操作的話,可以回退到MTOM。

此外,我已經有些假設到目前爲止,您正試圖在SOAP領域內做到這一點。如果您使用的是REST,那麼XML與MTOM與二進制編碼會得到緩解,因爲您只需發送/接收具有適當內容類型的純二進制HTTP主體。一切取決於你想要做什麼

+0

現在,我只需要WCF服務就可以處理簡單的文件傳輸。另外,我對REST並不瞭解太多。我應該使用它來代替SOAP嗎? – rafale 2011-05-21 03:40:07

+0

什麼歸類爲「簡單」?你在談論的文件大小<1MB?使用Stream with Streaming模式的一點是,如果你不這樣做,整個請求/響應必須在從yoru WCF服務分派/返回之前緩衝到內存中。顯然,如果你的信息很大,這個尺寸不會很好。至於SOAP與REST,我不會在這裏真正進入,但我強烈建議在REST上閱讀一下,看看它是否適合您嘗試使用此服務構建的內容。 – 2011-05-21 03:49:43

+0

謝謝,我會研究它。關於流的一點也使現在更有意義。因此,米奇小麥鏈接的那篇文章中描述的內容就是我應該爲此做的,對吧? http://msdn.microsoft.com/en-us/library/ms789010.aspx – rafale 2011-05-21 03:58:55

相關問題