使用大数据取消WCF调用?

时间:2013-03-27 14:34:09

标签: wcf asynchronous-wcf-call large-data

我即将使用WCF实现FileService。它应该能够通过提供filecontent本身和文件名来上传文件。当前的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服务是否合理?

1 个答案:

答案 0 :(得分:0)

如果文件大小超过一定数量,最好使用流。在我正在编写的企业应用程序的工作中,如果它大于16kb,那么我们流式传输它。如果它小于那个,我们缓冲。我们的文件服务专门用于处理这种逻辑。

当您将服务的传输模式设置为缓冲区时,它将在您传输数据时缓冲客户端和服务上的缓冲区。这意味着如果您要发送300mb文件,它将在呼叫完成之前在呼叫期间缓冲所有300mb。这肯定会造成瓶颈。出于性能原因,这应该仅在您拥有快速缓冲的小文件时。否则,流是最好的方式。

如果您的大多数或所有文件都是较大的文件,我会切换到使用流。

相关问题