2013-03-27 36 views
2

我即將實現使用WCF的FileService。它應該能夠通過提供文件內容本身和文件名來上傳文件。目前的ServiceContract如下所示取消帶有大量數據的WCF呼叫?

[ServiceContract] 
public interface IFileService 
{ 
    [OperationContract] 
    [FaultContract(typeof(FaultException))] 
    byte[] LoadFile(string relativeFileNamePath); 

    [OperationContract] 
    [FaultContract(typeof(FaultException))] 
    void SaveFile(byte[] content, string relativeFileNamePath); 
} 

它正常工作的那一刻,但我希望能夠降低使用這個的FileService我的應用程序的網絡負載。只要用戶打開我的應用程序的特定部分,我就需要提供許多文件,但只要用戶在應用程序中進一步瀏覽,我可能會取消其中的一些文件。由於許多我的文件大小在50到300 MB之間,傳輸文件需要幾秒鐘的時間(應用程序可能運行在非常慢的網絡上,可能需要一分鐘)。

澄清並概述與所有其他WCF問題的區別:具體問題是在客戶端< - >服務器之間提供數據是瓶頸,而不是服務本身的性能。正在改變流式WCF服務的界面是否合理?

回答

0

如果文件大小超過一定數量,則使用流是一種很好的做法。在我編寫的企業應用程序的工作中,如果它大於16kb,那麼我們將它流式傳輸。如果它比這少,我們緩衝。我們的文件服務專門用於處理這種邏輯。

當您將服務的傳輸模式設置爲緩衝區時,它將在您傳輸數據時在客戶端以及服務上進行緩衝。這意味着如果你發送一個300MB的文件,在通話結束之前,它會在通話期間緩衝所有300MB的文件。這肯定會造成瓶頸。出於性能方面的考慮,這應該只有當你有快速緩衝的小文件時。否則,流是最好的方法。

如果大部分或全部文件都是較大的文件,我會切換到使用流。