簡體   English   中英

取消具有大數據的WCF呼叫?

[英]Cancelling WCF calls with large data?

我將使用WCF實現FileService。 通過提供文件內容本身和文件名,它應該能夠上傳文件。 當前的ServiceContract如下所示

[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服務是否合理?

如果文件大小超過一定數量,則使用流是一個好習慣。 在編寫企業應用程序時,我們正在編寫,如果它大於16kb,則將其進行流式傳輸。 如果小於該值,我們將緩沖。 我們的文件服務是專門為處理這種邏輯而設計的。

當您將服務的傳輸模式設置為緩沖時,它將在客戶端和服務上在傳輸數據時緩沖。 這意味着,如果您要發送300mb的文件,則它將在通話結束之前在兩端的通話期間緩沖所有300mb的內容。 這肯定會造成瓶頸。 出於性能原因,僅當您具有快速緩沖的小文件時才應如此。 否則,流是最好的方法。

如果您的文件中的大部分或全部是較大的文件,我會改用流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM